您的当前位置:首页正文

springboot中使用Caffeine本地缓存

2021-03-07 来源:好走旅游网
springboot中使⽤Caffeine本地缓存

Caffeine是使⽤Java8对Guava缓存的重写版本性能有很⼤提升

⼀ 依赖

org.springframework.boot spring-boot-starter-cache

com.github.ben-manes.caffeine caffeine 2.7.0

⼆ 配置缓存,单独使⽤

只需要配置Bean就可以了,然后进⾏数据读写,注意这⾥提供了很多强⼤的⾃定义配置,可以查看⽂档详细配置

//定义缓存,可直接使⽤ @Bean

public LoadingCache expiryCache(){

LoadingCache loadingCache = Caffeine.newBuilder() .initialCapacity(100) .maximumSize(1000) //缓存写⼊/删除监控

.writer(new CacheWriter() { @Override

public void write(Object key, Object value) { //此⽅法是同步阻塞的 System.out.println(\"--缓存写⼊--:key=\" + key + \ }

@Override

public void delete(Object key, Object value, RemovalCause cause) { System.out.println(\"--缓存删除--:key=\" + key); } })

.expireAfterAccess(1, TimeUnit.MINUTES) //过期时间

.build((String key)->\"刷新的数据\"); //cacheload实现类,刷新时候调⽤ loadingCache.put(\"name\侯征\"); return loadingCache; }

测试使⽤:

@Autowired

private LoadingCache loadingCache; @GetMapping(\"/get\")

public Object getValue(String key){ return loadingCache.get(key); }

@GetMapping(\"/add\")

public void addValue(String value){ loadingCache.put(value,value); }

@GetMapping(\"/delete\")

public void deleteValue(String key){ loadingCache.invalidate(key);

loadingCache.invalidateAll();//清楚所有

}

@GetMapping(\"/refresh\")

public void refreshValue(String key){

//刷新时会根据build⽅法中中指定的cacheload重新加载 loadingCache.refresh(key); }

三 配置CacheManager,和spring缓存注解⼀起使⽤

配置CacheManager //配置CacheManager @Bean(name = \"caffeine\")

public CacheManager cacheManagerWithCaffeine() {

CaffeineCacheManager cacheManager = new CaffeineCacheManager(); Caffeine caffeine = Caffeine.newBuilder() //cache的初始容量值 .initialCapacity(100)

//maximumSize⽤来控制cache的最⼤缓存数量,maximumSize和maximumWeight(最⼤权重)不可以同时使⽤, .maximumSize(1000)

//最后⼀次写⼊或者访问后过久过期

.expireAfterAccess(500, TimeUnit.SECONDS) //创建或更新之后多久刷新,需要设置cacheLoader .refreshAfterWrite(10, TimeUnit.SECONDS); cacheManager.setCaffeine(caffeine);

cacheManager.setCacheLoader(cacheLoader);

cacheManager.setCacheNames(names);//根据名字可以创建多个cache,但是多个cache使⽤相同的策略 cacheManager.setAllowNullValues(false);//是否允许值为空 return cacheManager; }

配置 cacheload /**

* 必须要指定这个Bean,refreshAfterWrite配置属性才⽣效 */ @Bean

public CacheLoader cacheLoader() { return new CacheLoader() { @Override

public Object load(Object key) throws Exception { return null;} // 重写这个⽅法将oldValue值返回回去,进⽽刷新缓存 @Override

public Object reload(Object key, Object oldValue) throws Exception { System.out.println(\"--refresh--:\"+key); return oldValue; } }; }

其他就是在service中配置spring的⼏个缓存注解使⽤就⾏了,这⾥放⼀张截图,这些注解⽤法,⽹上很多:

因篇幅问题不能全部显示,请点此查看更多更全内容