面试题答案
一键面试- 调整过期策略:
- 采用更优默认策略:Redis默认有两种过期策略,
volatile-lru
(从已设置过期时间的键中挑选最近最少使用的键删除)和allkeys-lru
(从所有键中挑选最近最少使用的键删除)等。如果场景允许,选择更适合业务的策略,例如如果业务对数据新鲜度要求高,volatile-ttl
(从已设置过期时间的键中挑选即将过期的键删除)可能更合适,优先删除快过期的键,减少对正常业务键的影响。 - 自定义淘汰脚本:对于复杂业务场景,可以通过Lua脚本自定义淘汰逻辑。根据业务规则,例如按照键的前缀、类型等筛选要淘汰的键,在脚本中实现更精准的过期键删除。
- 采用更优默认策略:Redis默认有两种过期策略,
- 优化删除操作:
- 异步删除:使用
UNLINK
命令替代DEL
命令,UNLINK
会将键删除操作放入后台线程执行,避免在主线程中进行可能耗时的删除操作,减少对高并发读写的影响。 - 批量删除:如果能确定一批过期键,可以批量获取并删除,但要注意批量大小,避免一次操作占用过多资源,影响其他请求。
- 异步删除:使用
- 架构层面优化:
- 多实例分担:将数据分散到多个Redis实例,每个实例的过期键删除压力降低,并且通过合理的负载均衡策略,让请求均匀分配到各个实例,提升整体性能。
- 读写分离:主实例负责写操作和过期键删除,从实例负责读操作。这样读操作不会被过期键删除带来的性能波动影响,保证读的稳定性。同时,从实例可以设置较短的过期时间,减少过期键积累。
- 监控与调优:
- 监控指标:通过Redis自带的监控工具,如
INFO
命令获取过期键相关指标,如过期键的数量、每秒过期键删除数量等。结合业务指标,如响应时间、吞吐量,实时监控过期键删除对性能的影响。 - 动态调整:根据监控数据,动态调整过期键删除策略。例如在业务低峰期,增加过期键删除频率;在高峰期,降低删除频率或采用更温和的删除策略。
- 监控指标:通过Redis自带的监控工具,如