2012-01-05 6 views
4

についてはLRUの実装は、誰かがRedisのLRUベースの立ち退き/削除の内部について知っています。のRedisの内部 - サンプリング

どうRedisのは、古い(あまり使用)キーは(場合には、我々は揮発性の鍵を持っていないと我々はTTLの有効期限を設定していない)最初に削除されていることを確認しますか?

私は、Redisがキーを削除するために使用するサンプルサイズを管理する設定パラメータ "maxmemory-samples"を持っていることを知っています。したがって、サンプルサイズを10に設定すると、これらの中で。私にはわからない何

は、これらのキーの完全にランダムにサンプリングするかどうかである、またはそれは何らかの形でそれが自動的に「古い/使用頻度の低い世代」の同等からサンプリングすることができますメカニズムを持っているのですか?

+0

私が知る限り、それはランダムにキーをサンプリングします。 –

+0

これは私がhttp://antirez.com/post/redis-as-LRU-cache.htmlで見つけたものです。「サンプル3」アルゴリズムを使用することの全ポイントはメモリを節約することです。私はこれが精度よりもはるかに価値があると思っています。特に、この無作為アルゴリズムはあまりよく理解されていないためです。例:わずか3つのオブジェクトでサンプリングすると、999のデータセットから666個のオブジェクトが失効し、*完璧な* LRUアルゴリズムと比較してエラー率はわずか14%です。 残りの14%には非常に使用されている要素の範囲にある要素はほとんどありません。だから、メモリの利得は、疑いの余地なく精度を支払うでしょう。 –

+0

これを回答として投稿し、それを受け入れる必要があります。 :-) –

答えて

5

これは私がantirez.com/post/redis-as-LRU-cache.htmlで見つけたものである - 「サンプル3」アルゴリズムを使用しての全体のポイントは、メモリを節約することです。私はこれが精度よりもはるかに価値があると思っています。特に、この無作為アルゴリズムはあまりよく理解されていないためです。例:わずか3つのオブジェクトでサンプリングすると、999のデータセットからオブジェクトが666個失効し、完全なLRUアルゴリズムと比較してエラー率はわずか14%です。残りの14%には非常に使用されている要素の範囲にある要素はほとんどありません。だから、メモリの利得は、疑いの余地なく精度を支払うでしょう。

そこでRedisのサンプルをランダムに(これは..実際のLRUではなく、このような近似アルゴリズムとして、ことを意味する)が、精度は比較的高く、サンプリングサイズがこれをさらに増加させる増加します。しかし、誰かが正確なLRUを必要とする場合(エラーの許容範囲はゼロです)、Redisは正しい選択ではないかもしれません。

アーキテクチャ...彼らが言うように...トレードオフについて..ですので、生のパフォーマンスのためのトレードオフの正確さには、この(RedisのLRU)アプローチを使用しています。

関連する問題