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配置不同的有效时间。

posted @ 2019-05-27 18:15  Hiro-D  阅读(4598)  评论(0编辑  收藏  举报