缓存更新策略
内存淘汰 | 超时剔除 | 主动更新 | |
---|---|---|---|
说明 | 利用Redis的内存淘汰机制,不用自己维护,当内存不足时会自动淘汰部分数据。下次查询时更新缓存。 | 给缓存数据添加TTL(过期时间),到期后自动删除缓存。下次查询时更新缓存。 | 编写业务逻辑,在修改数数据库的同时更新缓存 |
一致性 | 差 | 一般 | 好 |
维护成本 | 无 | 低 | 高 |
业务场景:
- 低一致性需求:使用内存淘汰机制。例如店铺类型的查询缓存
- 高一致性需求:主动更新,并以超时剔除作为兜底方案。例如店铺详情查询的缓存
操作缓存和数据库需要考虑的三个问题:
-
删除缓存还是更新缓存?
- 更新缓存:每次更新数据库都要更新缓存,无效写的操作增多
- 删除缓存:更新数据库时让缓存失效,查询时再更新缓存
-
如何保证缓存与数据库的操作同时成功或失败(事务一致性)?
- 单体系统,将缓存和数据库操作放在一个事务中
- 分布式系统,使用TCC等分布式事务方案
-
先操作缓存还是先操作数据库?
-
先删除缓存,再操作数据库(下图为异常情况,导致数据不一致,发生概率高)
-
先操作数据库,再删除缓存(下图为异常情况,但更新数据库操作一定比写入缓存速度慢,则此情况发生的概率很低)
-