如何使用缓存 | 数据一致性
三种常见更新策略
- LRU/LRF/FIFO算法剔除 (Redis使用maxmemory-policy这个配置作为内存最大值后对于数据的剔除策略)
- 超时剔除
- 主动更新
使用建议:
- 低一致性的业务配置最大内存和淘汰策略的方式
- 高一致性的业务结合超时剔除和主动更新
数据库与缓存的一致性
1、推荐方式 - 先更新数据库,再删除缓存
出现脏数据的情况:
a.查询数据
b.缓存不存在
c.提交更新事务
d.删除缓存
e.回填缓存
后续读到的都是a步骤查询出来的脏数据,但是出现这种情况的条件要比下面的方式严苛得多。
2、如果是先删除缓存,那么会出现这种情况
在对缓存删除完之后(这时数据还没有更新),有一个读请求,这个时候由于缓存被删除所以直接会读库,读操作的数据是老的并且会被加载进入缓存当中,后续读请求全部访问的老数据。
3、缓存删除失败
如果缓存删除失败,缓存的数据就会和数据库的数据不一致,那么我们就只能靠过期超时来进行兜底。对此我们可以进行优化,如果删除失败的话 我们不能影响主流程那么我们可以将其放入队列后续进行异步删除。