Redis key过期时间浅谈
Redis通过expire命令来设置key的过期时间,在redis术语里面,把设置了expire time的key 叫做:volatile keys,意思就是不稳定的key。过期设置
语法:EXPIRE key seconds (该命令为参数中指定的Key设定超时的秒数,在超过该时间后,Key被自动的删除。如果该Key在超时之前被修改,与该键关联的超时将被移除。)
或者
语法:EXPIREAT key timestamp (该命令的逻辑功能和EXPIRE完全相同,唯一的差别是该命令指定的超时时间是绝对时间,而不是相对时间。该时间参数是Unix timestamp格式的,即从1970年1月1日开始所流经的秒数。)
在小于2.1.3的redis版本里,只能对key设置一次expire。redis2.1.3和之后的版本里,可以多次对key使用expire命令,更新key的expire time
过期时间清除
Key过期时间清除的情况:
1、PERSIST key 如果Key存在过期时间,该命令会将其过期时间消除,使该Key不再有超时,而是可以持久化存储。
2、SET key newValue 此时会清除过期时间,这个需要特别注意
3、DEL key 这个很显然会清除过期时间
一些触发修改value的操作(除了SET),如lpush,lset,incr等,将不会清除过期时间(redis2.1.3之前的版本是会清除的)。
另外 RENAME 也不会清除过期时间
过期处理
redis对过期键采用了lazy expiration:在访问key的时候判定key是否过期,如果过期,则进行过期处理。其次,每秒对volatile keys 进行抽样测试,如果有过期键,那么对所有过期key进行处理。
删除策略一般由以下几种
定时删除:在设置键的过期时间时,创建一个定时事件,当过期时间到达时,由事件处理器自动执行键的删除操作。
惰性删除:放任键过期不管,但是在每次从 dict 字典中取出键值时,要检查键是否过期,如果过期的话,就删除它,并返回空;如果没过期,就返回键值。
定期删除:每隔一段时间,对 expires 字典进行检查,删除里面的过期键。
而Redis是采用的惰性删除+定期删除来处理过期数据
页:
[1]