guava loadingCache代码示例

public class Test2 {

        public static void main(String[] args) throws Exception {
            LoadingCache<Integer, String> cache = CacheBuilder.newBuilder()
                    //设置并发级别为8,并发级别是指可以同时写缓存的线程数
                    .concurrencyLevel(8)
                    //设置缓存容器的初始容量为10
                    .initialCapacity(10)
                    //设置缓存最大容量为100,超过100之后就会按照LRU最近虽少使用算法来移除缓存项
                    .maximumSize(100)
                    //是否需要统计缓存情况,该操作消耗一定的性能,生产环境应该去除
                    .recordStats()
                    //设置写缓存后n秒钟过期
                    .expireAfterWrite(17, TimeUnit.SECONDS)
                    //设置读写缓存后n秒钟过期,实际很少用到,类似于expireAfterWrite
                    //.expireAfterAccess(17, TimeUnit.SECONDS)
                    //只阻塞当前数据加载线程,其他线程返回旧值
                    //.refreshAfterWrite(13, TimeUnit.SECONDS)
                    //设置缓存的移除通知
                    .removalListener(new RemovalListener<Integer, String>() {
                        @Override
                        public void onRemoval(RemovalNotification<Integer, String> notification) {
                            System.out.println("消除一个");
                        }
                    })
                    //build方法中可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
                    .build(new DemoCacheLoader());

            cache.put(1,"qwe");
            //缓存状态查看
            System.out.println(cache.size());


            System.out.println(cache.get(1));
            System.out.println(cache.get(2));
        }

        /**
         * 随机缓存加载,实际使用时应实现业务的缓存加载逻辑,例如从数据库获取数据
         */
        public static class DemoCacheLoader extends CacheLoader<Integer, String> {
            @Override
            public String load(Integer key) throws Exception {
                System.out.println(Thread.currentThread().getName() + " 加载数据开始");
                TimeUnit.SECONDS.sleep(8);
                Random random = new Random();
                System.out.println(Thread.currentThread().getName() + " 加载数据结束");
                return "value:" + random.nextInt(10000);
            }
        }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值