上一篇講到了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配置不同的有效時間。