Guava cache使用总结

Guava cache是google公司提供了一个好用的本地缓存工具。该工具提供了缓存的过期策略,缓存对象回收,缓存监控的一系列功能。用户只需要通过它提供的方法进行设置即可,大大简化了开发人员的工作。

项目地址:https://github.com/google/guava

  • 引入依赖:
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>
  • 简单用法:
GLOBAL_CACHE = CacheBuilder.newBuilder().
	.maximumSize(10000)
	.expireAfterAccess(180, TimeUnit.SECONDS)
	.expireAfterWrite(180, TimeUnit.SECONDS)
	.recordStats()
	.build(cacheLoader);
  • newBuilder():创建一个CacheBuilder对象,该对象封装了一些缓存参数信息;
  • maximumSize():设置缓存池大小,当缓存数量接近该大小时, Guava开始执行回收操作;
  • expireAfterAccess():设置基于对象的访问策略进行回收。如果对象在指定时间内没有读写操作,则会被回收;
  • expireAfterWrite():设置基于时间策略进行回收。如果超过了设置的时间,那么Guava执行回收操作;
  • recordStats():开启统计功能;
  • build():构建LoadingCache对象,并绑定localCache对象;

当构建出LoadingCache对象后,用户即可通过该对象提供了put和get方法读写缓存。

GLOBAL_CACHE.get("aa"); // 从缓存中读取aa的值
GLOBAL_CACHE.put("aa", "11"); // 添加aa到缓存中

Map<String, String> data = new HashMap<>();
data.put("bb", "22");
data.put("cc", "33");
GLOBAL_CACHE.putAll(data); // 将data里面所有key-value添加到缓存

执行get方法时候,如果缓存里面没有对应的key,那么就会执行CacheLoader对象的load方法加载数据。

@Override
public Object load(Object o) throws Exception {
    ...
    return "hello";
}

调用get方法的key作为load方法的参数传入。如果load方法的返回值不为null时,Guavacache会自动将返回值写入缓存,无需用户手动操作。但是,如果load方法中抛出异常,那么返回值是不会被写入缓存。

用户还可以在get方法中提供load方法,如下:

GLOBAL_CACHE.get("aa", () -> "hello")

如果aa不存在,那么会从第二个参数的返回值中加载数据。

默认情况下,Guavacache是没有开启统计功能。如果开启了统计功能,那么用户就可以通过调用LoadingCache对象的state方法获取CacheStats对象,该对象封装了缓存的状态信息。

String cacheInfo = String.format("lookup:%s, hit:%s, miss:%s,missRate:%s",
		GLOBAL_CACHE.stats().requestCount(),
		GLOBAL_CACHE.stats().hitCount(),
		GLOBAL_CACHE.stats().missCount(),
		GLOBAL_CACHE.stats().missRate());
  • requestCount():请求缓存的次数
  • hitCount():命中缓存次数
  • missCount():没有命中次数
  • missRate():命中率

Guavacache默认使用LRU淘汰算法,即将对象最后一次访问时间与当前时间进行对比,如果时间差越大,那么该对象越容易被回收。Guavacache还支持对缓存数据封装成软引用或弱引用。如果是软引用,那么当JVM内存不足的时候,JVM会自动对软引用的对象进行回收。如果是弱引用,那么GC在扫描JVM内存空间时候,一旦发现只有弱引用的对象,无论JVM内存是否足够,都会回收这些对象所占用的内存空间。

GLOBAL_CACHE = CacheBuilder.newBuilder()
	// 设置软引用
	.softValues() 
	// 设置弱引用
	//.weakKeys() 
	//.weakValues()
	...

具体可以参考:https://github.com/google/guava/blob/master/guava/src/com/google/common/cache/CacheStats.java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值