瞌睡中的葡萄虎

博客园 首页 新随笔 联系 订阅 管理

一、键过期功能的相关命令

二、设置生存时间

Redis 提供了两个命令来设置键的生存时间(TTL,time to live),它们分别是:

如果给定的键不存在,那么 EXPIRE 和 PEXPIRE 将返回 0 ,表示设置失败;如果命令返回 1 ,那么表示设置成功。
当一个键被设置了生存时间之后,它的生存时间将会随着时间的流逝而减少:时间过去一毫秒,键的生存时间就减少一毫秒;时间过去一秒钟,键的生存时间就减少一秒钟;以此类推。
当一个键的生存时间被减少至低于 0 时,Redis 就会自动将这个键删除掉

EXPIRE示例:

redis> SET msg "hello world"
OK
redis> EXPIRE msg 5 # 设置生存时间
(integer) 1
redis> EXISTS msg # 仍然存在
(integer) 1
redis> EXISTS msg # 已被自动删除
(integer) 0

 

严格来说,设置生存时间为 5 ,会让键存在 6 秒钟。

PEXPIRE 示例:

redis> PEXPIRE number 5500
(integer) 1
redis> EXISTS number
(integer) 1
redis> EXISTS number
(integer) 0

 

注 1 :一秒钟 = 1000 毫秒
注 2 :Redis 默认每 100 毫秒检查一次键是否过期,所以上表也是以每 100 毫秒为单位列出的。

三、设置过期时间

Redis 提供了两个命令用于设置键的过期时间(expire time):

如果给定的键不存在,那么 EXPIREAT 和 PEXPIREAT 将返回 0 ,表示设置失败;如果命令返回 1 ,那么表示设置成功。
对于被设置了过期时间的键来说,当键的过期时间小于当前时间的时候,Redis 就会自动地删除该键

EXPIREAT 示例:

redis> SET msg "time to go"
OK
redis> EXPIREAT msg 1000000005
(integer) 1
redis> EXISTS msg # 1000000005 之前
(integer) 1
redis> EXISTS msg # 1000000005 之后
(integer) 0

 

PEXPIREAT 示例:

redis> SET song "Last Night, Good Night"
OK
redis> PEXPIREAT song 1000000005500
(integer) 1
redis> EXISTS song # 1000000005500 之前
(integer) 1
redis> EXISTS song # 1000000005500 之后
(integer) 0

 

四、生存时间和过期时间的区别

设置生存时间和设置过期时间都可以让 Redis 自动删除指定的键,它们的区别在于设置“键什么时候要被删除”的方式不同

EXPIRE 和 PEXIRE 的作用是让键在 N 秒钟或者 N 毫秒之后被删除。
EXPIREAT 和 PEXPIREAT 的作用则是让键在指定的 UNIX 时间到达之后被删除。

带有生存时间的键就像是一个倒计时器,它会倒数 5、4、3、2、1、0,然后被删掉。
而带有过期时间的键则像是一个定时器,它会在指定的时间来临之后被删掉。

五、返回键的剩余生存时间

在为一个键设置过期时间或者生存时间之后,用户可以使用 TTL 命令或者 PTTL 命令查看这个键的剩余生存时间,以此来获知键还有多久才会被 Redis 删除:

TTL 和 PTTL 可能会返回三种不同的值:

TTL 和 PTTL 示例:

redis> SET msg "hello"
OK
redis> EXPIRE msg 10086
(integer) 1
redis> TTL msg
(integer) 10083
redis> PTTL msg
(integer) 10079336

 

redis> SET number 10086
OK
redis> EXPIREAT number 1408498480
(integer) 1
redis> TTL number # 距离 14...80 的秒数
(integer) 15
redis> PTTL number # 距离 14...80 的毫秒数
(integer) 11651

注意:Redis 并没有提供查看键的过期时间的命令,所以对于一个设置了过期时间的键来说,我们只能使用TTL 和 PTTL 来查看它的剩余生存时间

六、移除键的过期时间或生存时间

PERSIST key

 

移除为键 key 设置的过期时间或生存时间,使得它不会被 Redis 自动删除。
移除成功时命令返回 1 ;如果命令没有设置过期时间或生存时间,那么命令返回 0 。

PERSIST示例:

redis> SET msg "hello"
OK
redis> EXPIRE msg 30
(integer) 1
redis> TTL msg
(integer) 28
redis> PERSIST msg
(integer) 1
redis> TTL msg
(integer) -1

 

redis> SET number 10086
OK
redis> EXPIREAT number 1408499100
(integer) 1
redis> TTL number
(integer) 25
redis> PERSIST number
(integer) 1
redis> TTL number
(integer) -1

 

posted on 2014-09-22 19:54  瞌睡中的葡萄虎  阅读(886)  评论(0编辑  收藏  举报