Caffeine是使⽤Java8对Guava缓存的重写版本性能有很⼤提升
⼀ 依赖
org.springframework.boot spring-boot-starter-cache com.github.ben-manes.caffeine caffeine 2.7.0
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() { @Overridepublic void write(Object key, Object value) { //此⽅法是同步阻塞的 System.out.println(\"--缓存写⼊--:key=\" + key + \ }@Overridepublic 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; }测试使⽤:@Autowiredprivate 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配置属性才⽣效 */ @Beanpublic CacheLoader cacheLoader() { return new CacheLoader() { @Overridepublic Object load(Object key) throws Exception { return null;} // 重写这个⽅法将oldValue值返回回去,进⽽刷新缓存 @Overridepublic Object reload(Object key, Object oldValue) throws Exception { System.out.println(\"--refresh--:\"+key); return oldValue; } }; }其他就是在service中配置spring的⼏个缓存注解使⽤就⾏了,这⾥放⼀张截图,这些注解⽤法,⽹上很多: 因篇幅问题不能全部显示,请点此查看更多更全内容 查看全文
.writer(new CacheWriter() { @Overridepublic void write(Object key, Object value) { //此⽅法是同步阻塞的 System.out.println(\"--缓存写⼊--:key=\" + key + \ }@Overridepublic 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; }测试使⽤:@Autowiredprivate 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配置属性才⽣效 */ @Beanpublic CacheLoader cacheLoader() { return new CacheLoader() { @Overridepublic Object load(Object key) throws Exception { return null;} // 重写这个⽅法将oldValue值返回回去,进⽽刷新缓存 @Overridepublic Object reload(Object key, Object oldValue) throws Exception { System.out.println(\"--refresh--:\"+key); return oldValue; } }; }其他就是在service中配置spring的⼏个缓存注解使⽤就⾏了,这⾥放⼀张截图,这些注解⽤法,⽹上很多: 因篇幅问题不能全部显示,请点此查看更多更全内容 查看全文
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() { @Overridepublic Object load(Object key) throws Exception { return null;} // 重写这个⽅法将oldValue值返回回去,进⽽刷新缓存 @Overridepublic Object reload(Object key, Object oldValue) throws Exception { System.out.println(\"--refresh--:\"+key); return oldValue; } }; }其他就是在service中配置spring的⼏个缓存注解使⽤就⾏了,这⾥放⼀张截图,这些注解⽤法,⽹上很多: 因篇幅问题不能全部显示,请点此查看更多更全内容 查看全文
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的⼏个缓存注解使⽤就⾏了,这⾥放⼀张截图,这些注解⽤法,⽹上很多:
因篇幅问题不能全部显示,请点此查看更多更全内容