Redis是如何存储键的过期时间的?

|

1、过期相关命令

  • EXPIRE key seconds,设置key的生存秒数;
  • PEXPIRE key milliseconds,设置key的生存毫秒数;
  • EXPIREAT key timestamp,设置key的过期时间戳(秒);
  • PEXPIREAT key timestamp,设置key的过期时间戳(毫秒)
  • SETEX,设置一个字符串的过期时间;
  • TTL与PTTL,接收一个带有生存时间的键,返回键的剩余生成时间。

这些设置过期时间命令,本质上都会转成PEXPIREAT命令来执行,数据库中存储的是键的过期时间点。

2、应该使用哪个过期命令比较靠谱?

注意:建议直接使用EXPIREAT命令来设置过期时间,避免主从同步延迟,导致从库实际的EXPIREAT时间比主库的晚,最终客户端在从库上读取到了过期的数据(主库已过期,从库未过期)。

3、过期字典

我们注意到,上面的数据库结构图中,包含了一个expires过期字典,该字典的键是一个纸指向键空间中某个数据库键的指针,值是一个long long类型的整数,保存数据库键的过期时间(毫秒时间戳)。

image-20211010133010453