比如:HashMap,GuavaCache,Caffeine
优点:读取本地内存,没有网络开销,速度更快
缺点:存储容量有限,可靠性较低,无法共享
场景:性能要求较高,缓存数据量较小
我们这里使用Caffeine
Caffeine是一个基于java8开发的,提供了近乎最佳命中率的高性能本地缓存库
地址:https://github.com/ben-manes/caffeine
- 快速使用Caffeine
//创建缓存对象
Cache<String,String> cache=Caffeine.newBuilder().build();
//存数据
cache.put(key,value);
//取数据
String gf=cache.getIfPresent(key);//这种形式不是常用的这里如果缓存查不到就返回null
//取数据-常用,这里如果缓存查不到,就使用第二个参数的方法参数取数据库中进行查找
String gf=cache.get(key,key->{
//执行查询数据库的业务逻辑
return 返回数据
})
Caffeine三种缓存驱逐策略
- 基于容量,设置缓存的数量上限
Cache<String,String> cache=Caffeine.newBuilder()
.maximumSize(1) //设置缓存大小上限
.build();
- 基于时间,设置缓存的有效时间
Cache<String,String> cache=Caffeine.newBuilder()
.expireAfterWrite(Duration.ofSeconds(10))//设置缓存大小上限
.build();
- 基于引用:设置缓存为软引用或弱引用,利用GC来回收缓存数据,性能较差,不建议使用
默认情况下,当一个元素过期的时候,Caffeine不会立即将其清理或删除,而是当再一次读或写操作后,或者在空闲时间完成对失效数据的驱逐