根据redis文档,expireat接受unixtime作为参数,指定删除密钥的时间。
在redis cli中执行以下命令时:

127.0.0.1:6379> set bb bb
OK
127.0.0.1:6379> EXISTS bb
(integer) 1
127.0.0.1:6379> TTL bb
(integer) -1
127.0.0.1:6379> EXPIREAT bb 1462173420000 //executed at 1462173300000 ====>>> 1
(integer) 1
127.0.0.1:6379> EXISTS bb //executed after 1462173420000
(integer) 1 =============>>> 2
127.0.0.1:6379> TTL bb
(integer) 1460711246668
127.0.0.1:6379> TTL bb
(integer) 1460711246663
127.0.0.1:6379> EXPIREAT bb 100
(integer) 1 ===================>> 3
127.0.0.1:6379> EXISTS bb
(integer) 0 ===================>> 4

于2016年5月2日下午12:47至2016年5月2日下午12:45在BB执行到期。
即使是在2016年5月2日下午12:47之后,钥匙仍然存在。
为什么会这样?
为什么expireat接受无效的unixtime-100??

最佳答案

EXPIREAT将值作为秒,而不是毫秒。对于millseconds,您必须使用PEXPIREAT。您已将该值指定为毫秒,因此将过期时间设置为更高的值。
为您的用例做的小实验:

127.0.0.1:6379> set karthik 10
OK
127.0.0.1:6379> time //You can use this command to see redis time
1) "1462174316"
2) "692726"
127.0.0.1:6379> EXPIREAT karthik 1462174350 //setting the key to expire at 1462174350
(integer) 1
127.0.0.1:6379> get karthik
"10"

127.0.0.1:6379> ttl karthik //use this to see the time left
(integer) 22
127.0.0.1:6379> time
1) "1462174336"
2) "316226"
127.0.0.1:6379> get karthik
"10"
127.0.0.1:6379> time
1) "1462174343"
2) "310511"
127.0.0.1:6379> ttl karthik
(integer) 1
127.0.0.1:6379> time //time crossed 1462174350
1) "1462174351"
2) "48589"
127.0.0.1:6379> get karthik //key has got expired
(nil)
127.0.0.1:6379>

10-04 11:57