MST
星途 面试题库

面试题:Redis事件执行内存使用优化之高级题

假设在高并发的Redis事件执行环境下,如何通过合理设置过期策略和淘汰策略,在保证业务正常运行的前提下,最大程度地优化内存使用?请详细阐述你的思路和可能用到的Redis配置参数。
46.8万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

思路

  1. 过期策略
    • Redis 有三种过期策略:定时删除、惰性删除和定期删除。
    • 定时删除:在设置键的过期时间时,同时创建一个定时器,到过期时间时,立即删除键。这种策略对内存最友好,但对 CPU 不友好,因为在高并发环境下,大量的定时删除操作会占用过多 CPU 资源。
    • 惰性删除:键值对在被访问时检查是否过期,如果过期则删除。这种策略对 CPU 友好,但对内存不友好,因为可能会导致大量过期键长时间占用内存。
    • 定期删除:Redis 定期随机抽取一部分键检查是否过期并删除。通过合理设置定期删除的频率和每次检查的键数量,可以在 CPU 和内存之间找到平衡。在高并发环境下,推荐使用定期删除结合惰性删除的策略。
  2. 淘汰策略
    • 当 Redis 内存使用达到设置的上限时,需要根据淘汰策略来决定删除哪些键。
    • volatile - lru:从已设置过期时间的键中,使用 LRU(最近最少使用)算法删除最近最少使用的键。适用于希望保留长期有效键,只淘汰过期键的场景。
    • volatile - ttl:从已设置过期时间的键中,删除剩余 TTL(存活时间)最短的键。适合对过期时间敏感,优先淘汰即将过期键的业务。
    • volatile - random:从已设置过期时间的键中,随机删除键。在没有明显使用模式时可采用。
    • allkeys - lru:从所有键(无论是否设置过期时间)中,使用 LRU 算法删除最近最少使用的键。适用于不区分键是否过期,都可以淘汰的场景,能有效利用内存。
    • allkeys - random:从所有键中随机删除键。
    • noeviction:不删除任何键,当内存不足时,执行写操作会报错。这种策略一般不推荐在高并发场景下使用,因为可能导致业务写入失败。

可能用到的 Redis 配置参数

  1. 过期策略相关
    • hz:该参数控制 Redis 定期删除操作的频率,单位是 Hz(每秒执行次数)。默认值是 10,即每秒执行 10 次定期删除操作。在高并发环境下,可以适当提高这个值,比如设置为 100,但这会增加 CPU 负担,需要根据实际情况权衡。配置方式可以在 redis.conf 文件中修改 hz 参数值,或者在运行时通过 CONFIG SET hz <value> 命令设置。
  2. 淘汰策略相关
    • maxmemory:设置 Redis 可以使用的最大内存量。当内存使用达到这个值时,淘汰策略开始生效。可以在 redis.conf 文件中设置 maxmemory <bytes>,或者在运行时通过 CONFIG SET maxmemory <bytes> 命令设置。
    • maxmemory - policy:设置淘汰策略。可在 redis.conf 文件中设置 maxmemory - policy <policy>,如 maxmemory - policy allkeys - lru,也可以在运行时通过 CONFIG SET maxmemory - policy <policy> 命令设置,<policy> 取值为上述提到的各种淘汰策略名称。