MST
星途 面试题库

面试题:Redis键空间存储架构中,过期键是如何处理的?

在Redis数据库键空间存储架构下,阐述过期键的处理机制,包括何时检查键是否过期以及过期后对内存和数据访问的影响。
24.4万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

过期键检查时机

  1. 惰性删除
    • 当客户端访问一个键时,Redis会先检查该键是否过期。如果过期,会删除该键,并返回相应的空值(例如,对于GET操作返回nil)。这种方式只有在实际访问键时才进行过期检查,减少了CPU的额外开销。
  2. 定期删除
    • Redis会周期性地随机从数据库的expires字典中取出一定数量的键检查是否过期,并删除过期键。
    • 这个周期是由Redis的配置参数hz控制,hz表示每秒执行serverCron函数的次数,默认值为10,即每秒执行10次。每次执行serverCron函数时,会随机检查一些键的过期情况。
    • 每次检查的键数量不是固定的,Redis会根据当前数据库中键的数量等因素动态调整每次检查的键数,以平衡CPU开销和内存释放。

过期后对内存和数据访问的影响

  1. 内存影响
    • 一旦键过期并被删除(无论是惰性删除还是定期删除),该键所占用的内存就会被释放,从而使得Redis占用的内存减少。这有助于控制Redis的内存使用量,避免因大量过期键占用内存而导致内存溢出等问题。
  2. 数据访问影响
    • 对于已过期且被删除的键,后续对该键的任何读或写操作都会返回空值或失败(例如,GET操作返回nil,SET操作正常执行但实际上是在创建新键)。这是因为过期键已不存在于数据库中,就如同该键从未存在过一样。客户端在进行数据访问时,不会感知到该键曾经存在且已过期,只知道当前键不存在。