Redis Expires 简介和使用

作者:Rui 发布时间:June 24, 2016 分类:Redis,BIGDATA 浏览:4,004

Redis提供了为key设置生存时间的功能,当给指定的key的生存时间过期时,redis将会自动删除该Key. 在Redis术语中,也通常将设置过生存时间的Key称为易失的Key(volatile)

使用示例:
redis-expire.png

刷新过期时间

当给一个key设置生存时间后,所有删除或者编辑该key的value的操作,都会清除key的过期时间,例如:set,getset,del等存储相关的命令,也就是说,其他相关修改key值,但不是覆盖key值的操作,是不会影响生存时间的,例如:INCR,LPUSH等
另外,我们也可以使用EXPIRE命令给已经设置过生存时间的key重新设置新的值。
redis-expire2.png
注意:在Redis 2.1.3之前,是不可以通过EXPIRE命令来重新设置key的生存时间,并且在修改volatile key时,会触发删除key的操作,这是因为当时同步机制的限制,但是2.1.3之后的版本就没有这样的问题了

过期时间和持久化

Redis key的生存时间是以Unix timestamps(精度毫秒,>2.6)的形式存储的,所以Redis key的过期是依赖于Redis Server的系统时间,也就是说当我给一个Key设置1000 seconds的生存时间,但我之后将服务器的时间设置为2000 seconds之后,这个key就会立马过期。而是等待1000 seconds.所以,在持久化生成RDB文件后,如果想要多台电脑同步,必须保证这多台服务器时间保持一致,这样才能保证Redis expire运行正常

如果是使用AOF持久化或者同步时,Redis会在key过期时,将DEL命令记录到AOF中,这样在恢复或者同步slave时,能够保持数据一致。并且当salve连接到master时,slave不会单独检查key的过期,只会等待master同步删除命令,当slave断开master时,就恢复单独检查key的过期

Redis过期时间工作原理

Redis 有两种方式来处理过期,一种是积极的,一种是消极的方式

  1. 积极的方式
    Redis会在客户端访问时,判断key是否过期,如果过期,就会主动删除过期的key

  2. 消极的方式
    光有积极的方式,是不够的,对于那些不经常访问的key,就很难被第一种方式清除,所以Redis在后台会定期抽取一定量的volatile key 做检查,具体的操作过程:

    • 抽取20个设置生存时间的key,检查是否过期
    • 删除所有过期的key
    • 如果其中有25%的key过期,再重新从第一步开始执行一遍

    redis会按照这样的算法一直检查keyspace,直到过期的key占比降到25%。
    可以看出,Redis的key即使过期,也不会立马被清除,也会占据一定的内存空间

标签: none

仅有一条评论 »

  1. Nothing found for -ontario-canada .

添加新评论 »