「user *」に一致するキーを削除したい。
redisコマンドラインでどうすればいいですか?
現在のところ、これは一度に実行できる機能ではありません( DEL
documentation のコメントを参照)。残念ながら、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
-それぞれについて、エコーステートメントを作成して削除します。| redis-cli
-DELステートメントを取得し、cliに戻します。これが最善のアプローチであることを示唆していません(一部のユーザー名にスペースが含まれていると問題が発生する可能性がありますが、うまくいけばうまくいきます)。
あなたがしたいことをするために使用する別のコンパクトなワンライナーは次のとおりです:
redis-cli KEYS "user*" | xargs redis-cli DEL
現在、キーを削除するコマンドがあります。つまり、DELキー[キー]
Orangeoctopusの答えに加えて、echo
とパイプは必要ありません。コマンドを引数としてredis-cli
に渡すことができます。これはあなたができることを意味します
for key in `redis-cli "KEYS" "user*" | awk '{print $1}'`
do redis-cli "DEL" "$key"
done
awk
を使用し、redis-cli KEYS
コマンドとredis-cli DEL
コマンドへのパイプを使用して、redisから一致するすべてのキーを見つけます。
redis-cli KEYS "user*" | awk '{ system("redis-cli DEL " $1) }'
Onelinerを使用する場合、特定の文字をエスケープする場合にパターンを編集できます。たとえば、「\ b test\b」のようなパターンを削除するには、次を使用します。
redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del
これを使用して、バックスラッシュ、引用符、二重引用符、スペースを含むredisキーを削除します。
redis-cli KEYS "user*" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed "s/'/\\\\'/g" | sed 's/ /\\ /g' | xargs redis-cli DEL
私はこれが古いことを知っていますが、Googleからここに来る人のために:
コマンドラインインターフェイスユーティリティをnpmとgithubに公開しました。これにより、特定のパターンに一致するキーを削除できます(偶数、またはユーザーに尋ねたとおり) Redisデータベースから。
このユーティリティは次の場所にあります。