springboot整合guava实现本地缓存的示例代码
作者:spream至尊
本文主要介绍了springboot整合guava实现本地缓存的示例代码,包括三种回收方式及手动清除方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一、Springboot缓存
SpringBoot支持很多种缓存方式:redis、guava、ehcahe、jcache等等。
二、guava介绍
Guava Cache 是 Google 开源的一套开发工具集合,Guava Cache 是其中的一个专门用于处理本地缓存的轻量级框架,是全内存方式的本地缓存,而且是线程安全的。
和 ConcurrentMap 相比,Guava Cache 可以限制内存的占用,并可设置缓存的过期时间,可以自动回收数据,而 ConcurrentMap 只能通过静态方式来控制缓存,移除数据元素需要显示的方式来移除。
三、 缓存回收方式
1、基于容量回收

2、基于时间回收

3、基于引用回收
CacheBuilder.weakValues():和 CacheBuilder.weakKeys() 方法类似,该方法按照弱引用方式来存储缓存项的值,允许系统垃圾回收时回收缓存项。
CacheBuilder.weakValues(),使用软引用方式来包装缓存值,只有在内存需要时(一般在接近内存溢出时),系统会按照全局LRU(least-recently-used)原则进行垃圾回收。考虑到垃圾回收的性能问题,推荐使用基于容量的回收方式。
4、手动回收

guava使用
导入依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>recordStats:开启统计功能
stats:查看统计情况
void testRecordStats(){
Cache<String, String> callCache = CacheBuilder.newBuilder().
initialCapacity(5)
.maximumSize(100)
.recordStats()
.expireAfterAccess(1, TimeUnit.SECONDS)
.build();
/**
* CacheStats{hitCount=0, missCount=0, loadSuccessCount=0, loadExceptionCount=0, totalLoadTime=0, evictionCount=0}
*/
CacheStats stats = callCache.stats();
System.out.println(stats);
}
并发级别
调整concurrencyLevel即可

5、代码实例
/**
* @Author sprem至尊
* @Date 2022/10/24 19:39
* @Version 1.0
*/
package com.cn.xiaonuo.modular.wechat.cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
@Component
public class TokenCache {
private static LoadingCache<String,String> loadingCache = CacheBuilder
.newBuilder().initialCapacity(100).maximumSize(100)
.expireAfterWrite(7000, TimeUnit.SECONDS)
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return null;
}
});
public static void setKey(String key,String value){
loadingCache.put(key, value);
}
public static String getValue(String key){
String value = null;
try{
value = loadingCache.get(key);
if(value == null){
return null;
}
return value;
}catch (Exception e){
return null;
}
}
}到此这篇关于springboot整合guava实现本地缓存的示例代码的文章就介绍到这了,更多相关springboot guava本地缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
