💎

redisのEvictionって?

2023/04/26に公開

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-lruvolatile-ttlなどにしてメモリが溢れた場合、キーは削除されずメモリは解放されないままとなります。

下記のようなエラーを返します。

OOM command not allowed when used memory

まとめ

max-memory-policyの設定によって、メモリが溢れた際に自動でキーを削除するかしないかの設定することができる。

設定によっては、TTL(有効期限)の付け忘れによってキーが削除されないこともあるので注意

参照

http://mogile.web.fc2.com/redis/docs/manual/eviction/index.html

Discussion