本地缓存
Guava
- 支持最大容量限制
- 支持两种过期删除策略
- 支持简单的统计功能
- 插入时间
- 访问时间
- 基于LRU算法实现
java
LoadingCache<Integer, String> cache = CacheBuilder.newBuilder()
//设置并发级别为8,并发级别是指可以同时写缓存的线程数
.concurrencyLevel(8)
//设置缓存的初始容量为10
.initialCapacity(10)
// 设置缓存最大容量为100,超过100之后就会按照LRU最近最少使用算法来移除缓存
.maximumSize(100)
//设置写缓存后8秒钟过期
.expireAfterWrite(8, TimeUnit.SECONDS)
//设置要统计的缓存命中率
.recordStats()
//设置缓存移除通知
.removalListener(new
RemovalListener<Object, Object>() {
public void onRemoval(RemovalNotification<Object, Object>
notification) {
System.out.println("----"+notification.getKey() + ":" + notification.getCause());
}
})
//build方法可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
.build(
new CacheLoader<Integer, String>() {
@Override
public String load(Integer s) throws Exception {
System.out.println("load data:"+ s);
String str = s+":cache-value";
return str;
}
}
);
xml
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
Caffeine
java8新的缓存工具,是Guava Cache的增强版。
功能上和Guava相似,只是缓存算法更优秀 - W-TinyLFU
java
Cache<Integer, String> cache = Caffeine.newBuilder()
//设置缓存的初始容量为10
.initialCapacity(10)
// 设置缓存最大容量为100,超过100之后就会按照LRU最近最少使用算法来移除缓存
.maximumSize(100)
//设置写缓存后8秒钟过期
.expireAfterWrite(8, TimeUnit.SECONDS)
//设置要统计的缓存命中率
.recordStats()
//设置缓存移除通知
.removalListener((Integer key, String value, RemovalCause cause) -> {
System.out.println("缓存删除了!!!!");
})
//build方法可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
.build(k -> setValue(1).apply(1));
xml
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.8.5</version>
</dependency>
Encache
纯java的进程内缓存框架。
- 支持多种缓存淘汰算法
- 支持堆内存储、堆外存储、磁盘存储等三种。
- 支持多种集群方案,解决数据共享问题。
Guava和Caffeine只支持堆内存储,而Encache支持堆外存储和磁盘存储。
而且 Enchache 支持配置文件设置缓存的大小,可以动态调整。