版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议
前言
今天继续来看有关于keys的命令,记得之前在学习 SETEX 命令的时候说过,这个命令可以在设置键对应的值的同时指定过期时间,如果设置过期时间是5秒,那么5秒内这个键是有效的,超过5秒键被删除,当时测试的时候还等了5秒看结果,今天学了这几个命令之后,可以直接修改和查询键的过期时间,一起来看下吧。
TTL
- 最早出现版本:1.0.0
- 时间复杂度:O(1)
- 命令参数:TTL key
- 操作类型:keys
- 官方文档
作用
查询一个键的过期剩余时间,在Redis中如果键过期了会被直接删掉,这个命令返回的过期时间单位是秒,从2.8版本开始,如果指定的键不存在返回-2,如果指定的键存在但是不会过期,那么返回-1,这两种情况在2.6版本及之前都是返回-1的。
练习
先查看一个不会过期的键的剩余有效时间:
127.0.0.1:6379> SET name albert
OK
127.0.0.1:6379> TTL name
(integer) -1
127.0.0.1:6379>
再查询一个会过期的键,有效期内查一次,过了有效期查一次,先指定有效期时间为8秒:
127.0.0.1:6379> SETEX age 8 18
OK
127.0.0.1:6379> TTL age
(integer) 6
127.0.0.1:6379> TTL age
(integer) 3
127.0.0.1:6379> TTL age
(integer) -2
127.0.0.1:6379> GET age
(nil)
127.0.0.1:6379>
EXPIRE
- 最早出现版本:1.0.0
- 时间复杂度:O(1)
- 命令参数:EXPIRE key seconds
- 操作类型:keys
- 官方文档
作用
设置一个键的过期时间,指定成功返回1,指定的键不存在返回0,如果指定的数字是负数,则这个键会直接删除,键的过期时间可以在重新设置是被覆盖和重置,比如用 EXPIRE 命令设置了过期时间,但是在用 SET 命令设置就可以变成永久不过期的,当使用 rename 命令时,新的键会继承旧键的过期时间。
练习
对一个永久的键设置过期时间,查询后再使用 SET 命令覆盖过期时间,然后设置过期时间为负数,直接将键删除:
127.0.0.1:6379> SET name albert
OK
127.0.0.1:6379> TTL name
(integer) -1
127.0.0.1:6379> EXPIRE name 60
(integer) 1
127.0.0.1:6379> TTL name
(integer) 55
127.0.0.1:6379> SET name tom
OK
127.0.0.1:6379> TTL name
(integer) -1
127.0.0.1:6379> GET name
"tom"
127.0.0.1:6379> EXPIRE name -1
(integer) 1
127.0.0.1:6379> GET name
(nil)
127.0.0.1:6379>
EXPIREAT
- 最早出现版本:1.2.0
- 时间复杂度:O(1)
- 命令参数:EXPIREAT key timestamp
- 操作类型:keys
- 官方文档
作用
同样是设置一个键的过期时间,只不过参数不是秒数,而是一个时间戳,关于时间戳首先需要了解,以秒为单位的时间戳是指,从1970年1月1日00:00:00那一刻开始到当前时间的秒数就是时间戳,如果想指定一个键在2020年1月1日00:00:00过期,既可以将那一刻对应的时间戳作为参数使用,那么当 Redis运行到那一个时,现在指定的这个键就被删除了。
练习
先查询一下今天凌晨的时间戳(北京时间2019-12-03 00:00:00),时间戳应该是1575302400,设置一个键在凌晨过期,看一下测试结果
27.0.0.1:6379> SET name albert
OK
127.0.0.1:6379> EXPIREAT name 1575302400
(integer) 1
127.0.0.1:6379> TTL name
(integer) 11914
127.0.0.1:6379>
查询剩余的过期时间还有11914秒,大概3个小时,现在的时间是(北京时间)2019-12-2 20:42:35,这样来算是没有问题的。
总结
- TTL 命令应该是 Time To Live 的缩写,返回一个键的剩余过期时间,单位是秒,不存在返回-2,不会过期返回-1。
- EXPIRE 命令可以设置一个键的过期时间,单位是秒,成功设置返回1,键不存在返回0。
- EPIPIREAT 命令同样可以设置键的过期时间,但是参数是过期的时间点,也就是代表那个时间点的时间戳。
2019-12-2 20:46:46




