1.缓存概论:
1.1流程设计
image.png
1.1适合放入缓存的数据:
- 访问频率高
- 更改频率低
- 一致性要求不高
1.2重要指标
- 命中率 = 从缓存中读取次数 / (总读取次数[从缓存中读取次数 + 从慢速设备上读取的次数])
- Miss率 = 没有从缓存中读取的次数 / (总读取次数[从缓存中读取次数 + 从慢速设备上读取的次数])
1.3常规设计方案
-
流程图
image.png - 代码实现
Provinces provinces = null;
//在redis查询
provinces = (Provinces)redisTemplate.opsForValue().get(provinceid);
if (null != provinces){
System.out.println("缓存中得到数据");
return provinces;
}
provinces = super.detail(provinceid);
if (null != provinces){
redisTemplate.opsForValue().set(provinceid,provinces);//set缓存
redisTemplate.expire(provinceid,20000, TimeUnit.MILLISECONDS);//设置过期
}
return provinces;
1.4 更新(包括新增和删除)操作陷阱(双删策略)
-
流程图(读操作未命中,同时进行写操作)
image.png - 代码实现
public Provinces update(Provinces entity) {
redisTemplate.delete(entity.getProvinceid());//直接删除缓存,预防数据库成功,缓存失败
super.update(entity);
redisTemplate.delete(entity.getProvinceid());//双删
return entity;
}
网友评论