これは簡単な質問かもしれませんが、答えを見つけるのに苦労しています。Redis 2.0 は、割り当てられた最大メモリの不足をどのように処理しますか? どのデータを削除するか、どのデータをメモリに保持するかをどのように決定しますか?
ベストアンサー1
仮想メモリ機能をオンにしている場合(編集: 現在は廃止されています)、メモリが不足すると、Redis は「あまり頻繁に使用されない」データをディスクに保存し始めます。
Redis の仮想メモリが無効 (デフォルト) で、maxmemory
パラメータが設定されている場合 (デフォルト)、Redis は許可されている以上のメモリを使用しませんmaxmemory
。無効にするとmaxmemory
、Redis は仮想メモリ (つまりスワップ) の使用を開始し、パフォーマンスが大幅に低下します。
新しいバージョンの Redis には、maxmemory
に達したときのさまざまなポリシーがあります。
volatile-lru
- 有効期限が設定されているキーの中から、最近使用されていないキーを削除しようとします。volatile-ttl
- 有効期限が設定されているキーの中から、残り有効期限が短いキーを削除しようとします。volatile-random
- 有効期限が設定されているキーの中からランダムに 1 つを削除します。allkeys-lru
- と似ていますvolatile-lru
が、通常のキーと有効期限が設定されたキーの両方を含むすべての種類のキーを削除します。allkeys-random
- と似ていますvolatile-random
が、通常のキーと有効期限が設定されたキーの両方を含むすべての種類のキーを削除します。
EXPIRE が設定されたキーのみを削除するポリシーを選択した場合、Redis のメモリが不足すると、プログラムは malloc() 操作を中止するだけのように見えます。つまり、さらにデータを保存しようとすると、書き込み操作は単に失敗します。
詳細情報へのリンク: