业务场景:
低一致性需求:使用内存淘汰机制。例如店铺类型的查询缓存,很少修改
高一致性需求:主动更新,并以超时剔除作为兜底方案。例如店铺详情查询的缓存,经常修改
主动更新策略
实际开发中最常用的还是01方案
考虑问题
删除缓存还是更新缓存?
更新缓存:每次更新数据库都更新缓存,无效写操作较多(不推荐)
删除缓存:更新数据库时让缓存失效,查询时再更新缓存(推荐)
如何保证缓存与数据库的操作的同时成功或失败?
单体系统,将缓存与数据库操作放在一个事务
@Transactional
分布式系统,利用TCC等分布式事务方案
先操作缓存还是先操作数据库?
先删除缓存,再操作数据库 (不推荐)
先写数据库,然后再删除缓存 (推荐)
总结
缓存更新策略的最佳实践方案:
低一致性需求:使用Redis自带的内存淘汰机制
高一致性需求:主动更新,并以超时剔除作为兜底方案(一般情况)
读操作:
缓存命中则直接返回
缓存未命中则查询数据库,并写入缓存,设定超时时间
写操作:
先写数据库,然后再删除缓存
要确保数据库与缓存操作的原子性