Guava Cache 的清空,刷新及统计功能

阅读更多

这篇文章是关于guava cache的最后一篇文章。

 

主要介绍guava cache的清空,刷新和统计的功能。

 

 

缓存数据的清空

 

      guava没有提供自动触发清空缓存数据的功能,而是提供了一种手工调用的方式,使用者需要通过Cache.cleanUp()的方式来清空缓存。

 

      所以一般可以有两种选择,一种是通过某个请求来触发清空动作,这种相当于按需清空,另一种则是通过定时任务,亦成为调度程序来清空,这种相当于与按时清空

 

缓存数据的刷新

 

      guava没有提供类似refreshall的方法刷新缓存中的所有值,而只是提供了 LoadingCache.refresh(K)方法,用于刷新某个键值对,这里有趣的是刷新动作是异步的,也就是在值被彻底刷新之前,如果有人取这个key的值,返回的还是没有刷新的值。

 

      如果你希望定义自己的刷新行为,可以重写 CacheLoader.reload(K, V)方法

 

LoadingCache graphs = CacheBuilder.newBuilder()
       .maximumSize(1000)
       .refreshAfterWrite(1, TimeUnit.MINUTES)
       .build(
           new CacheLoader() {
             public Graph load(Key key) { // no checked exception
               return getGraphFromDatabase(key);
             }

             public ListenableFuture reload(final Key key, Graph prevGraph) {
               if (neverNeedsRefresh(key)) {
                 return Futures.immediateFuture(prevGraph);
               } else {
                 // asynchronous!
                 return ListenableFutureTask.create(new Callable() {
                   public Graph call() {
                     return getGraphFromDatabase(key);
                   }
                 });
               }
             }
           });

 

缓存数据统计

 

      可以通过 CacheBuilder.recordStats()方法打开统计, Cache.stats()方法会返回一个CacheStats对象,里面有缓存条目访问率等数据,如果你的缓存需要做一些调优,可以参考这里的数据。

你可能感兴趣的:(cleanup,guava,cache,refresh)