Redisで有効期限切れキーを削除するポリシー
Redisでは定期的な削除と遅延削除を組み合わせた手法で古いキーを削除しています。
- 一定期間ごとに古くなったキーを削除する。Redisではデフォルトでは1秒間に一定数の有効期限切れキーをチェックし、古くなったキーを削除します。hzパラメータを調整することでチェックの頻度を設定できます。hzの値はredis.confファイルで設定でき、デフォルトでは10に設定されています。つまり、1秒間に10個のキーをチェックします。
- アクセス時に期限切れなら即削除:Redisはキーのアクセス時に期限切れチェックし、切れていれば即削除。不要なリソース消費を抑え、必要なキーの削除をアクセス時に限定する。
Redisは有効期限切れキーを直ちに削除することを保証しておらず、キーにアクセスした際に削除を確認する点に注意が必要です。したがって、有効期限切れとなったキーがRedis内に一時的に存在し続ける可能性があります。
maxmemory-policyパラメータを設定することで、削除ポリシーを設定できます。一般的なポリシーに次のようなものがあります。
- メモリ不足で書き込みができない場合にエラーを返します。
- volatile-lru: 設定した有効期限が切れたキーがメモリに収まらない場合、最近 Least Recently Used に基づいて削除
- メモリが新しい書き込みデータを保持するのに十分でない場合、有効期限を設定しているキーの中で、残りの有効期限が最も短いキーが削除される。
- 揮発性ランダム:メモリー容量が新的規データを格納するに足りなくなると、有効期限が設定されたキーをランダム削除します。
- メモリ不足などの際に新規書き込みを受け付けられなくなった場合、全キーに対するLRUアルゴリズムによって、最も最近アクセスした順に削除することでキーを削除する。
- 空き容量が足りない場合は、すべてのキーからランダムにキーを削除する。
maxmemory-policy パラメータを redis.conf ファイルに設定することで、対応するポリシーを選択できます。または、実行時に config set コマンドを使用して動的に変更できます。