缓存设计模式

缓存设计模式

缓存热点数据, 缩短调用链

旁路缓存

适用于强一致性

  • 写请求 -> 更新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时期
posted @ 2022-09-11 01:08  Blazer96  阅读(60)  评论(0)    收藏  举报