Redis 缓存策略

缓存更新策略

缓存中的数据可能会和数据源的真实数据有一段时间不一致,需要利用一些策略来进行更新:

  • LRU/LFU/FIFO 算法
  • 超时剔除
  • 主动更新
策略 一致性 维护成本
LRU/LFU/FIFO 最差
超时剔除 较差 较低
主动更新

缓存粒度

如何选择缓存的粒度也比较重要,缓存粒度太大(全部缓存)会导致内存上升。如果缓存粒度太细,反复修改则会降低代码的可维护性

缓存穿透

也就是类似缺页,需要从mysql查询再缓存的情况出现。例如攻击者请求了不存在的ID,然后导致大量穿透,数据库读写较慢,拖垮服务器。

这时候有可以设置空对象,如果设置空对象,意味着缓存中存储了很多key,会消耗很多空间,如果是攻击则问题更加严重,设置一个较短的过期时间可以缓解。

如果这时候,在过期时间内,存储层添加了这个数据,就会导致缓存存储不一致,可能影响业务。

缓存定期删除方式

惰性删除:读写之前判断key是否过期(CPU友好) 定期删除:定期抽样key,判断是否过期(内存友好)

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy