Redis之过期策略

保存过期时间

redisDb结构(存储了数据库中所有的键值对)中有一个expires字典保存了数据库中所有键的过期时间。我们称这个字典为过期字典

  • 过期字典的键是一个指针,这个指针指向键空间的某个键对象

  • 过期字典的值是一个long long类型的整数,这个整数保存了键对象的过期时间--一个毫秒精度的UNIX时间戳

过期删除策略

  • 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键过期时间来临时,立即执行对键的删除操作
  • 惰性删除:只有当再次访问键时,才会判断键是否过期,若过期则删除
  • 定期删除:每隔一段时间,程序对数据库进行一次检查,删除里面的过期键。

redis采用的时惰性删除+定期删除的策略(定时删除对cpu太不友好了)。每隔一段时间redis从过期字典中随机检查一部分键的过期时间并删除其中的过期键。

AOF,RDB和复制功能对过期键的处理

在生成和载入RDB文件时,会对键进行检查并自动忽略已过期的键。

在进行AOF文件写入时,不会对键进行检查,只有当过期键被删除时,才会在AOF文件中追加一条del指令

在进行AOF重写时,会对数据库中的键进行检查,已过期的键不会被保存在重写后的AOF文件中。

在复制模式下,从服务器过期键的删除由主服务器控制:

  • 主服务器在删除一个过期键之后,会显式的向所有从服务器发送一个del指令通知从服务器删除过期键
  • 当从服务器发现某个键过期后,会当没有发现,只有在主服务器发现过期键后并发送del指令从服务器才会删除过期键。
posted @ 2021-10-12 16:15  刚刚好。  阅读(88)  评论(0编辑  收藏  举报