面试题答案
一键面试与内存相关的重要参数
- maxmemory:用于设置Redis实例可以使用的最大内存大小。当达到该限制时,Redis将根据设置的
maxmemory-policy
策略来处理新写入的数据。 - maxmemory-policy:定义了在达到
maxmemory
限制后,Redis处理新写入数据的策略。常见策略如下:- noeviction:默认策略,当内存达到限制时,新写入操作会返回错误,不会删除任何数据。
- allkeys-lru:在所有键中使用LRU(最近最少使用)算法删除键,以腾出空间。
- volatile-lru:在设置了过期时间的键中使用LRU算法删除键。
- allkeys-random:从所有键中随机删除键。
- volatile-random:从设置了过期时间的键中随机删除键。
- volatile-ttl:在设置了过期时间的键中,优先删除剩余时间(TTL)短的键。
根据业务场景调优避免内存溢出
- 读多写少场景:
- 参数设置:可选择
allkeys-lru
策略。因为读多写少意味着数据相对稳定,使用LRU算法可以优先淘汰长时间未被访问的键,保证热点数据留在内存中。 - 示例:对于缓存大量只读数据(如商品详情页缓存)的Redis实例,采用此策略可有效利用内存,减少缓存穿透和雪崩风险。
- 参数设置:可选择
- 读写均衡场景:
- 参数设置:如果大部分键都设置了过期时间,
volatile-lru
策略较为合适;若不是,allkeys-lru
也能满足需求。同时,需要根据业务预估数据量和访问频率,合理设置maxmemory
。 - 示例:对于实时统计系统,数据有一定时效性,且读写操作较为均衡,使用
volatile-lru
可在过期键中优先淘汰不常用数据。
- 参数设置:如果大部分键都设置了过期时间,
- 写多读少场景:
- 参数设置:
volatile-ttl
策略可能更适合,因为这类场景下数据更新频繁,优先淘汰剩余过期时间短的键能及时释放内存。若键大多未设置过期时间,allkeys-random
也可考虑,但可能存在删除重要数据的风险。 - 示例:在日志记录系统中,数据写入频繁且一般设置了过期时间,
volatile-ttl
可有效管理内存。
- 参数设置:
- 严格限制数据丢失场景:
- 参数设置:若业务不允许丢失任何数据,如金融交易记录等,应使用
noeviction
策略,并根据业务增长趋势合理预估并设置较大的maxmemory
,同时结合其他手段(如数据持久化、集群扩展等)来保证数据安全。
- 参数设置:若业务不允许丢失任何数据,如金融交易记录等,应使用