缓存设计模式
缓存设计模式
缓存热点数据, 缩短调用链
旁路缓存
适用于强一致性
- 写请求 -> 更新DB, 并删除cache
- 读请求 -> 先查cache, miss后再查DB并写回
@Service
public class UserService{
@Autowired
private UserDAO userDAO;
private RedisTemplate redisTemplate;
public User getUserById(Integer id) {
User user = redisTemplate.opForObject();
if (user == null) {
user = userDAO.getUserById(id);
if (user != null) {
redisTemplate.update();
}
}
}
public void updateUser(User user) {
Integer id = user.getId();
userDAO.updateUser(user);
redisTemplate.delete(id);
}
}
穿透缓存
- 写操作hit则更新DB + cache, miss则更新DB
- 读操作miss则查DB并写回cache
- 保证DB的写实时性, 基于此的读操作使得cache保持热点
异步缓存
- 写操作只更新cache, 用消息同步DB
- 读操作miss则查DB并写回cache
- 写实时性高, 适合写多读少
- 同步DB可lazy化, 如rocksDB merge到一定程度后一次同步到DB
兜底缓存
- 写操作只写DB
- 读操作先读DB, 失败则读cache(兜底数据), 成功则写回cache(将兜底数据更新为DB里的真实数据)
- 适用于高可用, 幂等缓存
只读缓存
- 写操作只写DB
- 读操作只读cache, 并用消息以一定周期更新cache
- 周期性保证最终一致性, cache命中率100
回源缓存
- 读写都DB
- 适用于人工介入cache时期

浙公网安备 33010602011771号