当前位置:嗨网首页>书籍在线阅读

07-命令介绍

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.2.1 命令介绍

在2.6版中,无论键不存在还是键没有过期时间都会返回 − 1 ,直到2.8版后两种情况才会分别返回 −2−1 两种结果。

在实际的开发中经常会遇到一些有时效的数据,比如限时优惠活动、缓存或验证码等,过了一定的时间就需要删除这些数据。在关系数据库中一般需要额外的一个字段记录到期时间,然后定期检测删除过期数据。而在Redis中可以使用 EXPIRE 命令设置一个键的过期时间,到时间后Redis会自动删除它。

(integer) –1

EXPIRE 命令的使用方法为 EXPIRE key seconds ,其中 seconds 参数表示键的过期时间,单位是秒。如要想让 session:29e3d 键在15分钟后被删除:

redis> SET session:29e3d uid1314 OK
redis> EXPIRE session:29e3d 900 (integer) 1

EXPIRE 命令返回1表示设置成功,返回0则表示键不存在或设置失败。例如:

redis> DEL session:29e3d (integer) 1
redis> EXPIRE session:29e3d 900 (integer) 0

如果想知道一个键还有多久的时间会被删除,可以使用 TTL 命令。返回值是键的剩余时间(单位是秒):

redis> SET foo bar OK
redis> EXPIRE foo 20 (integer) 1
redis> TTL foo (integer) 15
redis> TTL foo (integer) 7
redis> TTL foo (integer) –2

可见随着时间的不同, foo 键的过期时间逐渐减少,20秒后 foo 键会被删除。当键不存在时 TTL 命令会返回 − 2

那么没有为键设置过期时间(即永久存在,这是建立一个键后的默认情况)的情况下会返回什么呢?答案是返回 − 1

redis> SET persistKey value OK
redis> TTL persistKey

版本差异

如果想取消键的过期时间设置(即将键恢复成永久的),则可以使用 PERSIST 命令。如果过期时间被成功清除则返回 1 ;否则返回 0 (因为键不存在或键本来就是永久的):

redis> SET foo bar OK
redis> EXPIRE foo 20 (integer) 1
redis> PERSIST foo (integer) 1
redis> TTL foo (integer) –1

除了 PERSIST 命令之外,使用 SETGETSET 命令为键赋值也会同时清除键的过期时间,例如:

redis> EXPIRE foo 20 (integer) 1
redis> SET foo bar OK
redis> TTL foo (integer) –1

使用 EXPIRE 命令会重新设置键的过期时间,就像这样:

redis> SET foo bar OK
redis> EXPIRE foo 20 (integer) 1
redis> TTL foo (integer) 15
redis> EXPIRE foo 20 (integer) 1
redis> TTL foo (integer) 17

其他只对键值进行操作的命令(如 INCRLPUSHHSETZREM )均不会影响键的过期时间。

EXPIRE 命令的 seconds 参数必须是整数,所以最小单位是1秒。如果想要更精确的控制键的过期时间应该使用 PEXPIRE 命令, PEXPIRE 命令与 EXPIRE 的唯一区别是前者的时间单位是毫秒,即 PEXPIRE key 1000EXPIRE key 1 等价。对应地可以用 PTTL 命令以毫秒为单位返回键的剩余时间。

提示

如果使用 WATCH 命令监测了一个拥有过期时间的键,该键时间到期自动删除并不会被 WATCH 命令认为该键被改变。

另外还有两个相对不太常用的命令: EXPIREATPEXPIREAT

EXPIREAT 命令与 EXPIRE 命令的差别在于前者使用Unix时间作为第二个参数表示键的过期时刻。 PEXPIREAT 命令与 EXPIREAT 命令的区别是前者的时间单位是毫秒。如:

redis> SET foo bar OK
redis> EXPIREAT foo 1351858600 (integer) 1
redis> TTL foo (integer) 142
redis> PEXPIREAT foo 1351858700000 (integer) 1