redis expired


知りたいこと

redis 上にある Expired のデータはいつ消されるのか

調査

[参考ページ1]
https://nekogata.hatenablog.com/entry/2013/03/18/113938
以下抜粋

Redis は expire で指定した時間が過ぎたデータを消すのにふたつの戦略を使ってる。
・ 値が取得されるときに消すよ

値が取得されるときに、その値がすでに expire 過ぎてたら消す。

・ 値が取得されなくても消すよ

  1. まずランダムに100個のキーを選ぶ
  2. 選んだキーのデータが expire 過ぎてたら消す
  3. 25 個より多くの key が expired だったら「1」からもう一度繰り返す

[参考ページ2]
http://gaishimo.hatenablog.com/entry/20121216/p1
以下抜粋

Redisではタイムアウト時間を設定したキーは時間を超えると自動で削除され、タイムアウト時間を設定しないと永続的に保存される。

また、メモリの空き領域がなくなった場合、期限のあるものから削除されていく(デフォルトの設定の場合)。
注意すべき点は、期限が設定されていないキーは削除対象にならないということである。

調査した結果わかったこと

・ expire が設定されている場合
⇒ 参照される時に消える、参照されなくても裏で自動的に消してるらしい

・ expire が設定されていない場合
⇒ 消えないらしい

確認

・ expire が設定されている場合

sample-redis.bvrzo2.0001.apne1.cache.amazonaws.com:6379> keys *
(empty list or set)

sample-redis.bvrzo2.0001.apne1.cache.amazonaws.com:6379> setex mystr1 10 "abc"
OK
sample-redis.bvrzo2.0001.apne1.cache.amazonaws.com:6379> keys *
1) "mystr1"

10秒後

sample-redis.bvrzo2.0001.apne1.cache.amazonaws.com:6379> keys *
(empty list or set)

⇒ 参照されてなくても裏で自動的に消していた。

・ expire が設定されていない場合

sample-redis.bvrzo2.0001.apne1.cache.amazonaws.com:6379> set mystr1 "abc"
OK
sample-redis.bvrzo2.0001.apne1.cache.amazonaws.com:6379> keys *
1) "mystr1"
sample-redis.bvrzo2.0001.apne1.cache.amazonaws.com:6379>

一時間後

sample-redis.bvrzo2.0001.apne1.cache.amazonaws.com:6379> keys *
1) "mystr1"

⇒ 裏で自動的に消してはいないと思われるが、消えていない。いつまで残るのかは不明。
※ 本当に消えないのかどうかを色々確認したが、判断できず。。