web-dev-qa-db-ja.com

Redisでは、キーを削除するにはどうすればよいですか?

「user *」に一致するキーを削除したい。

redisコマンドラインでどうすればいいですか?

64
TIMEX

現在のところ、これは一度に実行できる機能ではありません( DEL documentation のコメントを参照)。残念ながら、KEYSを使用して、結果をループし、DELを使用してそれぞれを削除するだけです。

Bashを少し使って手伝ってみませんか?

for key in `echo 'KEYS user*' | redis-cli | awk '{print $1}'`
 do echo DEL $key
done | redis-cli

手順を実行するには:

  1. echo 'KEYS user*' | redis-cli | awk '{print $1}'-すべてのキーを取得し、awkで不要な余分なテキストを削除します。
  2. echo DEL $key-それぞれについて、エコーステートメントを作成して削除します。
  3. | redis-cli-DELステートメントを取得し、cliに戻します。

これが最善のアプローチであることを示唆していません(一部のユーザー名にスペースが含まれていると問題が発生する可能性がありますが、うまくいけばうまくいきます)。

47
Donald Miner

あなたがしたいことをするために使用する別のコンパクトなワンライナーは次のとおりです:

redis-cli KEYS "user*" | xargs redis-cli DEL
59
user1151446

現在、キーを削除するコマンドがあります。つまり、DELキー[キー]

DELキー...

7

Orangeoctopusの答えに加えて、echoとパイプは必要ありません。コマンドを引数としてredis-cliに渡すことができます。これはあなたができることを意味します

for key in `redis-cli "KEYS" "user*" | awk '{print $1}'`
 do redis-cli "DEL" "$key"
done
2
neilkimmett

awkを使用し、redis-cli KEYSコマンドとredis-cli DELコマンドへのパイプを使用して、redisから一致するすべてのキーを見つけます。

redis-cli KEYS "user*"  | awk '{ system("redis-cli DEL " $1) }'
1
jeetu

Onelinerを使用する場合、特定の文字をエスケープする場合にパターンを編集できます。たとえば、「\ b test\b」のようなパターンを削除するには、次を使用します。

redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del
0
Private

これを使用して、バックスラッシュ、引用符、二重引用符、スペースを含むredisキーを削除します。

redis-cli KEYS "user*" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed "s/'/\\\\'/g" | sed 's/ /\\ /g' | xargs redis-cli DEL

0
make

私はこれが古いことを知っていますが、Googleからここに来る人のために:

コマンドラインインターフェイスユーティリティをnpmとgithubに公開しました。これにより、特定のパターンに一致するキーを削除できます(偶数、またはユーザーに尋ねたとおり) Redisデータベースから。

このユーティリティは次の場所にあります。

https://www.npmjs.com/package/redis-utils-cli

0
Gabriel McAdams