「user*」に一致するキーを削除したい。
redisコマンドラインでそれを行うにはどうすればよいですか?
私があなたがやりたいことをするために使うもう一つのコンパクトなワンライナーは:
redis-cli KEYS "user*" | xargs redis-cli DEL
これは、現時点では一発でできる機能ではありません (DEL
ドキュメントのコメントを参照してください)。残念ながら、 を使用KEYS
して結果をループし、 を使用DEL
してそれぞれを削除するだけです。
bash を少し使ってみてはどうでしょうか。
for key in `echo 'KEYS user*' | redis-cli | awk '{print $1}'`
do echo DEL $key
done | redis-cli
ステップスルーするには:
echo 'KEYS user*' | redis-cli | awk '{print $1}'
-- すべてのキーを取得し、必要のない余分なテキストを awk で取り除きます。echo DEL $key
-- それぞれに対して、echo ステートメントを作成して削除します。| redis-cli
-- DEL ステートメントを取得し、cli に戻します。これが最善のアプローチであることを示唆しているわけではありません (一部のユーザー名にスペースが含まれていると問題が発生する可能性がありますが、うまくいけば要点が理解できます)。
キーを削除するコマンド、つまり DEL キー [keys] があります。
を使用して、コマンドとコマンドへのパイプをawk
使用して、redis から一致するすべてのキーを見つけます。redis-cli KEYS
redis-cli DEL
redis-cli KEYS "user*" | awk '{ system("redis-cli DEL " $1) }'
Orangeoctopus の回答に加えて、echo
and パイプは必要ありません。コマンドを引数として に渡すことができますredis-cli
。これは、あなたができることを意味します
for key in `redis-cli "KEYS" "user*" | awk '{print $1}'`
do redis-cli "DEL" "$key"
done
これを使用して、バックスラッシュ、引用符、二重引用符、またはスペースを含む redis キーを削除します。
redis-cli KEYS "user*" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed "s/'/\\\\'/g" | sed 's/ /\\ /g' | xargs redis-cli DEL
oneliner を使用する場合、特定の文字をエスケープする場合に備えてパターンを編集できます。たとえば、'\b test \b' のようなパターンを削除するには:
redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del