引用pom版本
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>22</version> </dependency>
如下测试代码:
public class test {
private volatile static Cache<String, Boolean> userCache;
static {
userCache = CacheBuilder.newBuilder()
//设置写缓存后n秒钟过期
.expireAfterWrite(20, TimeUnit.SECONDS)
//设置缓存最大容量为100,超过100之后就会按照LRU最近虽少使用算法来移除缓存项
.maximumSize(100)
.build();
}
public static void main(String[] args) {
String userId = "A10220";
Boolean userDone = userCache.getIfPresent(userId);
if (userDone == null) {
//接口进行一些处理
userCache.put(userId, true);
System.out.println("重新设置:" + userCache.getIfPresent(userId));
} else {
System.out.println("已经设置:" + userCache.getIfPresent(userId));
}
}
}
Guava Cache了解(JVM 堆内缓存):
1:很好的封装了get、put操作,能够集成数据源 ;
2:线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略,后者只能显示的移除元素;
3:Guava Cache提供了三种基本的缓存回收方式:基于容量回收、定时回收和基于引用回收。定时回收有两种:按照写入时间,最早写入的最先回收;按照访问时间,最早访问的最早回收;
监控缓存加载/命中情况
public static Map<String, Boolean> WECHATPY_COMMON_MAP = new ConcurrentHashMap<>();也可以使用这种Map来缓存值,就没有了移除策略,缓存少量值没有影响,缓存值不可计量时,会有内存溢出的风险
Guava Cache堆内缓存,只能在单个节点中使用,适用场景:
1:保存第三方链接;2:程序中需要判断,改动频率小的设置(可以通过缓存提高查询性能)3:防抖操作等
分布式场景下可以使用 Redis、Memcached共享内存,根据场景是否适用来选择