这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
Redis的持久化对过期键的处理
RDB
在执行save 命令或者bgsave 命令创建一个新的rdb 文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的rdb 文件中。
数据库中包含过期键不会对生成新的rdb 文件造成影响
在启动redis 服务器的时候,如果服务器开启了rdb 功能,服务器将对rdb 文件载入:
如果服务器以主服务器模式运行,载入rdb 文件时,程序会对文件中保存的键进行检查,未过期的键会被载入到数据库中,
如果服务器以从服务器模式运行,载入rdb 文件时,文件中保存的所有键,无乱是否过期都会载入到数据库中。但在主从服务器同步的时候,从服务器的数据库会被清空。
AOF
服务器以AOF 持久化模式运行,如果数据库中的某个键过期了但是没有被删除,AOF 文件不会影响
当过期键被删除后,程序会向AOF 文件中追加一条DEL 命令,记录该键被删除。
AOF重写程序会对数据库中的键进行检查,已过期的键不会被保存到重写后的AOF文件中。
复制模式
服务器在复制模式下对于过期键的处理:
主服务器在删除一个过期键之后,会显式的向所有从服务器发送DEL 命令,告知从服务器删除这个过期键
从服务器在执行客户端发送的读命令时,即使碰到过期键也不会将过期键删除,从服务器只有在接到主服务器发来的DEL 命令之后,才会删除过期键
通过由主服务器来控制从服务器统一的删除过期键,保证主从服务器数据的一致性。