自学内容网 自学内容网

Guava Cache

Guava Cache

  • 单应用、本地缓存
  • 依赖
<dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1-jre</version> 
        </dependency>
  • 示例
import com.google.common.cache.*;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;


public class LocalCache {
    public static void main(String[] args) throws ExecutionException {
//     LoadingCache 在缓存项不存在时可以自动加载缓存
        LoadingCache<String,Object> loadingCache
//               CacheBuilder 构造私有,只能通过静态方法 newBuilder()来获取CacheBuilder的实例
                = (LoadingCache<String, Object>) CacheBuilder.newBuilder()
//                设置并发级别8;同时写缓存的线程数为8
                .concurrencyLevel(8)
//                写缓存后8秒过期
                .expireAfterWrite(8, TimeUnit.SECONDS)
//                写缓存后1秒刷新
                .refreshAfterWrite(1,TimeUnit.SECONDS)
//                缓存初始容量 10
                .initialCapacity(10)
//                缓存最大容量100,超过100之后会按照LRU最近最少使用算法移除缓存项
                .maximumSize(100)
//                设置要统计缓存的命中率
                .recordStats()
//                缓存的移除通知
                .removalListener(new RemovalListener<String, Object>() {
                    @Override
                    public void onRemoval(RemovalNotification<String, Object> removalNotification) {
                        System.out.println(removalNotification.getKey() + "被移除,原因:" + removalNotification.getCause());
                    }
                }).build(
                        new CacheLoader<String, Object>() {
                            @Override
                            public Object load(String key) throws Exception {
                                System.out.println("缓存不存在时,从数据加载"+key);
//                                todo 记载数据,返回对应数据
                                return new Object();
                            }
                        }
                );
//        第一次读取,会加载数据
        for (int i = 0; i < 20; i++) {
            Object o = loadingCache.get(i + "");
            System.out.println(o);
        }
//        第二次读取,直接用
        for (int i = 0; i < 20; i++) {
            Object o = loadingCache.get(i + "");
            System.out.println(o);
        }
        System.out.println("缓存命中率:"+loadingCache.stats());

    }
}


原文地址:https://blog.csdn.net/weixin_46488959/article/details/143837077

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!