wiki
Guava 中的缓存是本地缓存的实现,与 ConcurrentMap 相似,但提供了自动回收方法,以此限制内存的使用.
1. 创建
1.1. Cache
Cache 是最基本缓存接口
1 | public void cacheCreateTest() { |
1.2. LoadingCache
LoadingCache 继承自 Cache ,当从缓存中读取某个 key 时,假如没有读取到值,其会自动进行加载数据到缓存
1 | public void loadingCacheTest() throws ExecutionException { |
2. 常用参数
2.1. 容量初始化
1 | public void initialCapacityTest(){ |
2.2. 最大容量
最大容量可以通过两种维度来设置:
maximumSize
: 最大记录数,存储数据的个数maximumWeight
: 最大容量,存储数据的大小
1 | public void maxSizeTest(){ |
2.3. 过期时间
expireAfterWrite
: 写入后多长时间,数据就过期了expireAfterAccess
: 数据多长时间没有被访问,就过期
1 | public void expireTest() throws InterruptedException { |
2.4. 引用
1 | Cache<String,String> cache = CacheBuilder.newBuilder() |
3. 回收
1 | public void invalidateTest(){ |
4. 数据清除监听器
可以给 Cache 中的对象加一个监听,当有对象被删除时会有事件通知。
创建 Cache 时 removalListener 方法传入一个 RemovalListener 对象,重写 onRemoval 方法来进行数据清除事件的监听。
三种情况下的清除数据都会被监听:
- 超过容量,清除最早添加进缓存的数据
- 超过设定的过期时间,缓存系统自动删除
- 手动清除数据
1 | public void removeListenerTest() throws InterruptedException { |
5. 统计信息
我们在使用缓存的时候,应该要关心缓存的命中率、加载数据时间等等信息,可以根据这些统计信息来对缓存进行优化调整,让缓存更好的为我们服务。在构建缓存对象时,可以开启统计信息,开启后会对缓存的操作进行统计
1 | public void recordStatsTest(){ |