1、介绍
- 一般来说,redis是作为缓存数据库的能手,但是它却会受限于磁盘io的性能和远程网络的原因存在瓶颈,于是便有了我们的本地热点缓存,这里的本地内存是jvm内部的内存,属于堆栈的内存信息,可想而知这部分的内存资源特别的宝贵,不能吧所有的东西都存入到这里,而是应该存一些热点数据。
- 热点数据就是每秒钟会被访问上千上万的数据,这样会减少网络开销。对于本地热点缓存它要求的特点是内存可控以及设置超时时间,还可以配置lru的策略,线程安全。
- 因此考虑,在下面情况下可以考虑使用guava cache:
- 1、愿意消耗一些内存空间来提升速度
- 2、预料到某些键会被多次查询
- 3、缓存中存放的数据总量不会超出内存容量
2、使用
2.1 引入依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
2.2 封装本地缓存操作类
* 封装本地缓存操作类
*/
public interface CacheService {
//存方法
void setCommonCache(String key,Object value);
//取方法
Object getFromCommonCache(String key);
}
2.3 通过cachebuild来生成缓存,并init操作
@Service
public class CacheServiceImpl implements CacheService {
private Cache<String,Object> commonCache=null;
//在类加载的时候优先执行
@PostConstruct
public void init(){
commonCache= CacheBuilder.newBuilder()
//设置缓存的初始容量为10
.initialCapacity(10)
//设置缓存中最大可以存储的容量为100
.maximumSize(100)
//设置过期时间
.expireAfterWrite(30, TimeUnit.SECONDS).build();
}
@Override
public void setCommonCache(String key, Object value) {
commonCache.put(key,value);
}
@Override
public Object getFromCommonCache(String key) {
return commonCache.getIfPresent(key);
}
}