4

誰かが Redis LRU ベースのエビクション/削除の内部について知っていますか?

古い (あまり使用されていない) キーが最初に削除されることを Redis はどのように保証しますか (揮発性キーがなく、TTL の有効期限を設定していない場合)?

Redis には、キーの削除に使用するサンプル サイズを管理する構成パラメーター「maxmemory-samples」があることは確かです。そのため、サンプル サイズを 10 に設定すると、10 個のキーがサンプリングされ、その中から最も古いキーが削除されます。

私が知らないのは、これらのキーを完全にランダムにサンプリングするのか、それとも「古い/あまり使用されていない世代」に相当するものから自動的にサンプリングできるメカニズムがあるのか​​ ということです?

4

2 に答える 2

7

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

そのため、Redis はランダムにサンプリングしますが (これは実際の LRU ではなく、そのような近似アルゴリズムであることを意味します)、精度は比較的高く、サンプリング サイズを大きくすると、これがさらに大きくなります。ただし、正確な LRU が必要な場合 (エラーに対する許容度はゼロ)、Redis は適切な選択ではない可能性があります。

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

于 2012-01-10T06:46:28.317 に答える