MST

星途 面试题库

面试题:Redis内存回收机制中,常见的触发条件有哪些?

请阐述在Redis内存回收机制下,一般会在哪些情况下触发内存回收操作,以及这些触发条件对Redis性能可能产生的影响。
24.8万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

触发内存回收操作的情况

  1. 达到maxmemory限制:当Redis使用的内存达到maxmemory配置项所设定的内存上限时,就会触发内存回收。Redis提供了多种内存淘汰策略(如noevictionvolatile-lruallkeys-lruvolatile-randomallkeys-randomvolatile-ttl等),根据不同策略决定淘汰哪些数据来释放内存。
  2. 过期键清理:Redis会定期主动检查过期的键,默认每秒进行10次过期扫描(可通过hz配置项调整频率)。在扫描过程中,会删除那些已经过期的键值对,从而释放内存。此外,当客户端访问一个过期的键时,也会触发对该过期键的删除操作,回收内存。

对Redis性能的影响

  1. 达到maxmemory限制时
    • noeviction策略:如果采用该策略,当内存达到上限后,再进行写操作会返回错误,读操作不受影响。这种情况下,虽然不会因为数据淘汰而产生额外开销,但业务的写操作会失败,影响业务的正常运行。
    • LRU和Random策略:无论是volatile-lruallkeys-lru还是volatile-randomallkeys-random策略,在触发内存回收时,都需要遍历数据来选择要淘汰的键值对。LRU策略相对更复杂,需要维护键的访问时间信息,这在一定程度上会增加CPU的开销。大量的淘汰操作可能导致CPU使用率升高,从而影响Redis处理其他请求的性能,例如响应时间变长,吞吐量下降。
    • volatile-ttl策略:此策略淘汰的是设置了过期时间且剩余存活时间较短的键。同样需要遍历数据,不过相比LRU策略,它不需要额外维护访问时间信息,开销相对较小,但仍可能因为遍历操作增加CPU负担,对性能产生一定影响。
  2. 过期键清理时
    • 定期主动扫描:每秒10次的过期扫描频率如果设置过高,会占用较多的CPU资源,影响Redis处理其他请求的性能。但如果频率过低,过期键不能及时清理,可能导致内存长时间占用过高。
    • 被动删除:客户端访问过期键触发的删除操作,一般情况下对性能影响较小,因为这是按需进行的操作,不会像定期扫描那样集中消耗资源。但如果大量过期键集中被访问,也可能在短时间内增加CPU开销,影响性能。