键的生存时间
通过EXPIRE命令或者PEXPIRE命令,客户端可以设置一个键的生存时间(TTL)。
过期时间是一个UNIX时间戳
RedisDb结构的expires字典保存了数据库中所有键的过期时间。称这个字典为过期字典
过期字典的键是一个指针,值是一个long long 类型的整数,保存了一个毫秒精度的UNIX时间戳
过期时间的判定,检查是否存在于过期字典,如果存在则获取时间
检查当前UNIX时间戳是否大于键的过期时间
过期时间的删除策略问题:
定时删除,创建一个定时器定时进行遍历删除
惰性删除,当用户获取键时才判断是否过期删除。
定期删除,时间区间比定时删除要打
Redis使用的是惰性删除和定期删除两种方式
重点:AOF与RDB操作对过期键的处理问题
RDB ,在生成RDB文件时过期时间的键是不会被存入到文件当中
在载入RDB文件时,如果服务去是主服务器则会检查是否有过期键,有则忽略。
如果是从服务去,则不进行判断,全部载入。
AOF,在生成文件时会将所有记录进行保存包括过期了的键。
让过期键被删除时程序会向文件中追加一条DEl命令,来显式的进行记录该键已经被删除。