揭秘 20W 缓存如何扛 2000W 数据?缓存预热+更新+淘汰+过期

67 阅读2分钟

揭秘 20W 缓存如何扛 2000W 数据?预热+更新+淘汰+过期

回答

这个问题考查的是Redis的数据预热+更新+淘汰+过期相关的内容。主要从如下几个方面思考。

1. 数据预热
  • 根据实际的业务情况,把当前比较热的 或者 接下来可能比较热的数据,提前放到 Redis 缓存中。这样至少可以保证缓存刚生效的时候,数据是相对热的。
2. 热点数据更新
3. 缓存过期策略
4. 缓存淘汰策略
  • Redis 的缓存淘汰策略,其他参考:Java 八股/08-Redis/Redis 的 内存淘汰策略.md

  • LRU vs LFU 的区别?

    1. LRU(最近最少使用)
    2. LFU(最不经常使用)
  • LRU 策略适用于,短期内访问频率较高的热点数据。

    如果,业务场景中热点数据的访问模式相对稳定

    而且,在短期内访问频率较高,那么LRU更适合;

  • LFU 策略适用于,长期内访问频率较高的热点数据。

    如果,热点数据的访问频率存在较大波动

    而且,我们更关心长期内经常访问的数据,那么LFU更适合。

  • allkeys-lru VS volatile-lru

    1. 当 Redis 作为缓存使用的时候,推荐使用 allkeys-lru

      该策略会将最近最少使用的Key淘汰。

      默认情况下,使用频率最低,则后期命中的概率也最低,所以,将其淘汰。

    2. 当 Redis 作为半缓存半持久化使用时,可以使用 volatile-lru

      因为,Redis本身不建议保存持久化数据,所以,只作为备选方案。

    3. 阿里云Redis默认是 volatile-lru

    4. 腾讯云Redis默认是 noeviction,即不删除键。

      在内存占满后会出现 OOM 问题,

      所以,建议创建好实例后修改淘汰策略,减少 OOM 问题的出现。