springcache集成Guava 设置缓存时间
上一篇讲到了springboot集成springcahce :https://www.cnblogs.com/a565810497/p/10931426.html
但是缓存的有效时间无法设定。
这里就讲一下如何使用guava设定springcahce的有效时间
第一步:添加maven依赖:
<groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>25.1-jre</version> </dependency>
第二步,配置cacheManager:
@Bean public CacheManager cacheManager(){ GuavaCacheManager cacheManager = new GuavaCacheManager(); cacheManager.setCacheBuilder(CacheBuilder.newBuilder().expireAfterAccess(2,TimeUnit.SECONDS));//这里就是设置有效时长,我设置了2秒 return cacheManager; }
我把这代码写到了启动类里去。
这里
expireAfterAccess就是设置有效时间了,这里有多个用法,有读写后刷新,有固定刷新,详细的可以参考:https://blog.csdn.net/abc86319253/article/details/53020432
我们看一下测试代码:
@Test public void getTime() throws InterruptedException { int i = 1; while (i <= 20) { log.info("" + "第" + i + "次获取时间" + testTimeService.getTestTime()); i++; if (i <= 10) { Thread.sleep(1000); } else { Thread.sleep(3000); } } }
我们进行获取20次时间,前10次,每隔一秒拿一次,这样缓存不会过期,拿到的时间应该都是一样的,
后面10次就隔3秒拿一次,这个时候缓存已经到期了拿到的应该不是缓存内的时间,应该是最新时间
结果的确如此。
本文源码:https://gitee.com/Hiro-D/Java/tree/master/guava-cache
guava虽然可以设置cache的有效时间,但是是默认的有效时间,如果想要不同的cache有不同的时间guava就不太方便了(本人没找到方法),而且这样cache是本地缓存,想了一下,还是springcahce集合redis,这样就可以设置多个cache多个有效时间了,下一篇就会讲到springcahce+redis配置不同的有效时间。