揭秘 20W 缓存如何扛 2000W 数据?预热+更新+淘汰+过期
回答
这个问题考查的是Redis的数据预热+更新+淘汰+过期相关的内容。主要从如下几个方面思考。
1. 数据预热
- 根据实际的业务情况,把当前比较热的 或者 接下来可能比较热的数据,提前放到 Redis 缓存中。这样至少可以保证缓存刚生效的时候,数据是相对热的。
2. 热点数据更新
-
热点数据会随着线上业务的不断变化。所以,在实际工作中,一般会做实时的热点数据的检测。这里,参考下面链接。
JD 的热 key框架 :gitee.com/jd-platform…
3. 缓存过期策略
-
Redis 设置 Key 过期时间命令:EXPIRE、EXPIREAT、PERSIST。
4. 缓存淘汰策略
-
Redis 的缓存淘汰策略,其他参考:Java 八股/08-Redis/Redis 的 内存淘汰策略.md
-
LRU vs LFU 的区别?
- LRU(最近最少使用)
- LFU(最不经常使用)
-
LRU 策略适用于,短期内访问频率较高的热点数据。
如果,业务场景中热点数据的访问模式相对稳定,
而且,在短期内访问频率较高,那么LRU更适合;
-
LFU 策略适用于,长期内访问频率较高的热点数据。
如果,热点数据的访问频率存在较大波动,
而且,我们更关心长期内经常访问的数据,那么LFU更适合。
-
allkeys-lru VS volatile-lru
-
当 Redis 作为缓存使用的时候,推荐使用 allkeys-lru 。
该策略会将最近最少使用的Key淘汰。
默认情况下,使用频率最低,则后期命中的概率也最低,所以,将其淘汰。
-
当 Redis 作为半缓存半持久化使用时,可以使用 volatile-lru。
因为,Redis本身不建议保存持久化数据,所以,只作为备选方案。
-
腾讯云Redis默认是 noeviction,即不删除键。
在内存占满后会出现 OOM 问题,
所以,建议创建好实例后修改淘汰策略,减少 OOM 问题的出现。
-