guava cache

1、Guava Cache概述
Guava cache是一种本地缓存轻量级的缓存方案,底层依赖于ConcurrentHashMap,但比ConcurrentHashMap提供了更多的功能,比如缓存的回收(但是需要注意的是这种缓存回收机制并不是guava cache主动回收的,而是被动的基于缓存的读写进行回收的,这样的实现机制也是guava cache轻量级的一个原因之一)。

2、Guava key回收机制
1)基于容量回收
设置maximumSize的值,当缓存中key的数量接近这个值时,Guava就会基于最近最少使用的规则移除旧的key。

2)基于时间回收
设置expireAfterWrite,距离上一次写入后一段时间没有再写则移除key的值,进而重新加载该key的值
设置expireAfterAccess,距离上一次访问后一段时间没有再访问则移除key的值,进而重新加载该key的值
基于时间刷新
设置refreshAfterWrite,距离上一次写入后一段时间没有再写则移除key的值,进而重新加载该key的值

3)基于弱引用key和value的回收或者基于软引用value的回收
这种机制即使用弱引用或者软引用作为缓存的key或者value来使用,当jvm垃圾回收线程执行时,随着垃圾回收机制回收

3、expireAfterWrite和refreshAfterWrite的区别
1)expireAfterWrite回收机制是多个线程并发,只有获取到锁的线程才进入到CacheLoader的load的方法执行,其它线程需要等待该线程释放锁,然后再走一遍获取锁,返回值,释放锁的流程
2)refreshAfterWrite回收机制是多个线程并发,只有一个线程会进入CacheLoader的reload的方法执行(reload方法的默认实现是调用load方法,可以重写使用自己的逻辑),其它线程不等待直接返回原来的旧值。但若很长时间不访问的话,这种机制可能返回的值会是一个很早之前的旧值。

3)refresh和expire两者的不足之处很明显,但是guava允许同时设置这两个方法,从而达到功能互补的目的

4、key移除的监听方法
通过使用下面的方法可以监听到key的移除,可以根据系统的需要在key被移除时实现一个功能逻辑等。

.removalListener(new RemovalListener<String, String>() {
                @Override
                public void onRemoval(RemovalNotification<String, String> rn) {
                    System.out.println("cache removed key:" + rn.getKey());
                }
            })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值