Redis を使った運用をしていて、場合によっては特定のキー削除をするケースに遭遇するかもしれません。
例えば、テスト開発中に無駄なキーをたくさん作ってしまったとか、有効期限(TTL)を多めに設定してしまったので削除したいとか、いろいろなパターンがあると思います。
今回は、そんな運用ケースに対応した方法を紹介します。
削除はワイルドカード指定できない
通常、Redis のキーを検索する際にはワイルドカード指定が可能なので、それと同じ条件で削除しちゃえば楽かなっと安易に考えてしまうのですが、削除(del)はキーの完全一致でしかできないようです。
そこで、以下のような簡易的なシェルで削除コマンドを生成してみました。
1 2 3 4 5 6 7 8 9 10 | $ vi rilakkuma.sh #!/bin/sh if [ "$1" = "" ]; then echo "no key parameter." exit 1; fi KEY=$1 REDIS_HOST="localhost" REDIS_PORT="11211" $ redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT} keys ${KEY} | awk -F'"' '{print "redis-cli -h '"${REDIS_HOST}"' -p '"${REDIS_PORT}"' del "$1}' |
パイプで繋いで一気に削除もできます
これで、削除用のコマンドが生成できるので、これを画面上の標準出力からコピーするなり、ファイルに標準出力するなりして利用できます。
ファイルに出力した方が件数や中身も一度確認できるので安心です。
1 2 3 | $ ./rilakkuma.sh hogehoge:* > /tmp/hoge.txt $ cat /tmp/hoge.txt | wc -l $ less /tmp/hoge.txt |
ファイル出力したコマンドも以下でサクっと実行ができます。
1 | $ sh /tmp/hoge.txt |
どうしてもすぐに実行しちゃいたい場合は、思い切って以下のコマンドを実行しちゃいましょう。ホスト名やポート番号は置き換えて下さい。
1 | $ redis-cli -h localhost -p 11211 keys "hogehoge:*" | xargs redis-cli -h localhost -p 11211 del |