2015-10-01 9 views
10

に特殊文字を持つキーの数十万人を削除するには、どのように我々は、特殊文字のすべての種類を含むRedisのキーの数十万人のリストを持っていると我々は、バルク、それらを削除したいと思います。この質問に同様の問題にいくつかの素晴らしい答えがあります:私たちは、キー(数百の数が多いは、バルクのRedis

  1. How to atomically delete keys matching a pattern using Redis

    しかし、私はケースのための答えを見つけるように見えることはできません何千人)

  2. キーがすべてなど、二重引用符( ")、バックスラッシュ(などの特殊文字のマナー)、変なのUnicode文字のすべての種類、
  3. 我々はWindowsを使用しているを持っているのRedis-CLIクライアント
  4. ボーナス:理想的には、このコマンドを同等レベルで発行することができますtをMULTI/EXECトランザクションのために使用することができます。

    redis-cli SMEMBERS "myGiganticListOfKeys" | xargs --delim='\n' redis-cli DEL

    残念ながら、これだけの下に示します:私たちは以下のような何かを行うが、それはRedisの問題を与える特殊文字のすべてでキーを扱う持っていることができれば、私は大好きだ

エラー:私たちは、キーに特殊文字を持っていなかった場合、これはそうでない仕事だと思う

"C:/Program Files (x86)/Git/bin/xargs.exe": redis-cli: Bad file number

。事前にそんなに

感謝。

+0

私はWindowsフォークに慣れていませんが、redis-cliが--pipeスイッチをサポートしている場合は、すべての 'DEL 'コマンドを含むテキストファイルを準備し、直接パイプすることができます。 –

+0

@RyanVincent私たちは実際に、削除したいキーの正確なリストを持っています。それらはセットに入っています。問題は、そのセット(たとえば、SMEMBERS "myKeyName")を取り、多数の番号があるときにそれらをすべて削除し、キーに特殊文字がある場合です。 – jakejgordon

+0

アイデア@ItamarHaberに感謝しますが、それでもうまくいきました - それは、私が思うように、それはちょうどSMEMBERS mykeyNameから利用可能なキーのリストを持っていることとは違うとは思わないでしょう - それほど実用的ではありません指定したセットに含まれるすべてのキーを削除するために、再利用可能なPowerShellスクリプトを作成しようとしています。このプロセスの一環として一時ファイルを作成し、それをクリーンアップするのは理想的ではありません。しかし、ありがとう。 – jakejgordon

答えて

1

あなたは、より堅牢なクライアントを使用してアプリケーションを作成してみてください。 client listを参照してください。 redis-cliはRedisでハック/プレイするための非常に基本的なコマンドラインユーティリティです。

は、私は最高のあなたのキー/値ストアを再設計することになることをあなたに同意します。あなたが複数のキーを無効にする必要がある場合

は、タギングメカニズムを使用することを検討してください:キーが追加されたときにタグがグループキーにハッシュを使用して、ハッシュ内のすべてのキーを削除するタグ全体を無効化します。ここで

+0

それは本当に私たちがしなければならないことです。ありがとう。 – jakejgordon

0

は、私は、これはRedisのを強調することなく、レコードの無数のために働く、それを解決した方法です。

WARNING: PLEASE DO NOT TRY THIS AT HOME UNATTENDED AND MAKE SURE TO WEAR 
ALL SAFETY EQUIPMENT NECESSARY FOR THE TASK. 

ステップ1.YES_WE_CAN.sh

redis-cli KEYS "StartsWith*" > YES_WE_CAN.sh 

ステップ2このファイルを呼び出すことができ、ファイルへのRedisからあなたが必要とするすべてのキーをダンプします。viでファイルを開くYES_WE_CAN.shかvimと入力して:文字を入力し、次のように入力して特殊文字'を置き換えます。

:%s/'/'"'"'/g 

文字をすべて'"'"'エスケープシーケンスに置き換えます。 (私を信頼してください、これは動作し続けます!)

ステップ3:前に追加各文字列redis-cli DELに()末尾にスペースを忘れてはいけない:

:%s/^/redis-cli DEL /g 

ステップ4:アペンドそれぞれの終わりに'文字を並べます:

:%s/$/'/g 

ステップ5:ファイルを保存し、QU実行モードにファイルYES_WE_CAN.shを変更:

chmod +x YES_WE_CAN.sh 

ステップ7:実行ファイル:スクリプトは削除されている間

./YES_WE_CAN.sh 

は、あなたのコーヒーをお楽しみください:wq

ステップ6を使用してあなたが要求した数百万の鍵