2016-05-02 5 views
0

Redisドキュメントごとに、EXPIREATはキーが削除される時刻を指定する引数としてunixtimeを受け入れます。 2016年5月2日12:45に2016年5月2日12:47 - 時間のために、BB上で実行Redis ExpireAtが期待どおりに動作しない

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 

EXPIREAT:私はRedisの-CLIで次のコマンドを実行

2016年5月2日12:47 PM以降も、キーは引き続き終了します。 なぜこれが起こっていますか?

EXPIREATが無効なunixtime - 100を受け入れるのはなぜですか?

答えて

2

EXPIREATはミリ秒単位ではなく、秒単位で値をとります。ミル秒の場合は、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> 
+0

感謝。 PEXPIREATを使うことができました。これはEXPIREATと同じですが、代わりにこの要件に適合する引数としてミリ秒かかります。 –

+0

これはなぜ動作しますか?> EXPIREAT bb 100 (整数)1 ?? 100はunix time 1/1/1970です。なぜこのキーが期限切れですか? –

+0

Redisによると、それは単なる値であり、現在の時間よりも短くなっています。そしてすぐに期限切れになります。場合によっては、キーを直ちに期限切れにしたい場合があります。そのような場合は、これを達成するために、より少ない価値を使用することができます。 –

関連する問題