缓存设计模式
缓存设计模式
缓存热点数据, 缩短调用链
旁路缓存
适用于强一致性
- 写请求 -> 更新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号