一、过期策略
Redis中有两种过期策略:惰性删除和定期删除。
惰性删除:当一个key过期后,不会立即被删除,而是等到下次被访问时再被删除。
定期删除:Redis默认每100毫秒检查一次有没有过期的key,有则删除。
二、过期时间查询方法
Redis提供了两种查询过期时间的方法:PERSIST和TTL。
PERSIST:移除key的过期时间,使得该key永不过期。
redis> SET key1 "Hello" "OK" redis> EXPIRE key1 10 (integer) 1 redis> PERSIST key1 (integer) 1 redis> TTL key1 (integer) -1
TTL:返回key的剩余生存时间,以秒为单位。
redis> TTL key1 (integer) 3
三、过期时间存储方式
Redis中key的过期时间可以通过两种方式存储:expires字典和设置值的时候直接存储时间。
expires字典:Redis使用一个字典来存储所有的key及其过期时间,每个key对应一个hash表里的键值对。
设置值的时候直接存储时间:当设置一个key的过期时间时,Redis会在内部将它转化为一个UNIX时间戳保存在key的过期时间属性里。
四、过期时间的精度
Redis的精度是秒级别的,过期时间会向上取整。
redis> SET key2 "Hello" "OK" redis> EXPIRE key2 1.5 (integer) 1 redis> TTL key2 (integer) 2
五、降低过期检查频率
为了减少过期检查的负担,我们可以在服务器较忙时,通过修改服务器配置文件(redis.conf)来增加检查过期时间的间隔,如下:
# 修改配置文件中的"hz"值,表示每秒钟执行几次任务。默认为10,我们可以改为5,减少过期时间检查的频率。 hz 5
六、设置过期时间的注意事项
在设置过期时间时,需要注意以下几点:
1、不能为不存在的key设置过期时间。
2、过期时间不宜过长,比如设置10年的过期时间,可能造成服务器负荷过大。
3、不应该设置不同步的过期时间,比如:A的过期时间是10s,而在A中又存了一个B,B的过期时间是20s,这样容易造成数据错误。
七、总结
Redis中的过期时间策略涉及到惰性删除和定期删除两种策略,并且有PERSIST和TTL两种查询方法。过期时间的存储方式有expires字典和设置值的时候直接存储时间。同时,要注意过期时间的精度和设置过期时间的注意事项,以免造成服务器负担过大或数据出错。