💎
redisのEvictionって?
Evictionとは
Redisのメモリが100%になるか、maxmemory設定を超えた時に、
既存のキーを削除しメモリを確保する挙動。
Evictionの設定
Eviction発生によるキーの削除ルールは、maxmemory-policyという設定で変更できます。
現在の設定の確認方法は下記です。
127.0.0.1:6666> INFO memory
maxmemory_policy:noeviction
設定を変更したい時は下記です。
127.0.0.1:6666> CONFIG SET maxmemory-policy volatile-lru
OK
メモリが溢れてもキーが自動削除されない設定
- noeviction: メモリの制限に達すると、新しい値は保存されない。キーの削除も行われない。
メモリが溢れたらキーが自動削除される設定
キーの有効期限の有無関係なく、全てを対象にする設定
- allkeys-lru: 最後に利用してから最も時間が経過しているキーを削除
- allkeys-lfu: 利用された回数が最も少ないキーを削除
- allkeys-random: キーをランダムに削除
キーに有効期限が設定されているものを削除対象にする設定
- volatile-lru: expireが設定されている、最後に利用してから最も時間が経過しているキーを削除
- volatile-lfu: expireが設定されている、利用された回数が最も少ないキーを削除
- volatile-ttl: expireが設定されている、残りの有効期限(TTL)値が最も短いキーを削除
- volatile-random: expireが設定されている、キーをランダムに削除
注意点
キーに有効期限をつけずに、設定をvolatile-lruやvolatile-ttlなどにしてメモリが溢れた場合、キーは削除されずメモリは解放されないままとなります。
下記のようなエラーを返します。
OOM command not allowed when used memory
まとめ
max-memory-policyの設定によって、メモリが溢れた際に自動でキーを削除するかしないかの設定することができる。
設定によっては、TTL(有効期限)の付け忘れによってキーが削除されないこともあるので注意
参照
Discussion