2016-03-23 4 views
9

Redisはキーの有効期限をどのように実装していますか? hereから、私はRedisがキーが期限切れになる時刻を記憶していることを知りましたが、これはどのように実装されていますか?redisはどのようにキーを期限切れにしますか?

+0

タイトルと質問が一致していません。何を聞いていますか? redisはどのようにキーを期限切れにするのですか?リスト内のアイテムを期限切れにすることができるかどうかを確認します。 –

+0

@Not_a_Golferタイトルを変更しました。混乱して申し訳ありません。 –

答えて

24

要するに、各赤目オブジェクトに対して、有効期限があります。期限切れにするオブジェクトを設定しない限り、その時間は「決して」ありません。

ここで、期限切れメカニズム自体は半怠惰です。遅れ期限切れとは、実際にオブジェクトが読み込まれるまで期限切れになっていないことを意味します。この場合、オブジェクトを読み込む際に、有効期限のタイムスタンプをチェックし、過去にあった場合は何も返さず、オブジェクトを削除します。しかし、問題は、キーに触れることは決してない場合、それは単に理由がないためにメモリを占有するということです。

したがって、Redisは、ランダムな有効期限の第2のレイヤーを追加します。それは常にランダムなキーを読み取るだけであり、期限切れのキーに触れると、遅延メカニズムに基づいて削除されます。これは期限切れの動作には影響しません。期限切れのキーの「ガベージコレクション」を追加するだけです。

実際の実装はこれよりも複雑ですが、これが主な考えです。 http://redis.io/commands/expire

を、アクティブな有効期限のサイクルのためのソースコードはここで見つけることができます:

あなたはここでそれについての詳細を読むことができますhttps://github.com/antirez/redis/blob/unstable/src/server.c#L781

関連する問題