KEYS を使わずにパターンに一致するキーを特定し、安全に削除する (SCAN + UNLINK)
Redisメンテナンスコマンド
# Cursor-based scan instead of KEYS (call again with the returned cursor until it returns 0):
SCAN 0 MATCH oturum:* COUNT 1000 TYPE string
# Number of keys matching the pattern:
redis-cli -h redis1 -p 6379 --scan --pattern 'oturum:*' --count 1000 | wc -l
# Bulk delete in batches of 500, freeing memory in the background:
redis-cli -h redis1 -p 6379 --scan --pattern 'oturum:*' --count 1000 | xargs -r -n 500 redis-cli -h redis1 -p 6379 UNLINK概要
サーバーをブロックせずにカーソルでキースペースを走査し、パターンと型に一致するキーを数え、UNLINK で一括削除してバックグラウンドでメモリを解放する。
使用する場面
古いアプリケーションバージョンが残したキーを整理する場合、あるプレフィックス配下のキー数を調べる場合、または本番環境で本来なら KEYS が必要となる場合。
注意
KEYS はキースペース全体を一度に返し、大量データではサーバーを数秒間ブロックするため、本番環境では使用しない。SCAN は走査中に追加 / 削除されたキーについて完全な保証をせず、同じキーを複数回返すことがある。空白や引用符を含むキー名は xargs で壊れる。削除前に件数といくつかのサンプルを確認する。元に戻す手段はない。