2011-07-27 5 views
544

すべてのキーを削除します。私はすべてのものを一掃し、私に空のデータベースを与えてほしい。Redisのすべてを削除するにはどうすればよいですか?

Redisクライアントでこれを行う方法はありますか? Redisの-CLIで

+3

(ホストとポートに)接続されたクライアントからのすべてのデータを削除します。それは0を返します。 – Chloe

答えて

914

  • FLUSHDBは - あなたの接続の現在のデータベースからデータを削除します。
  • FLUSHALL - すべてのデータベースからデータを削除します。

Redisのドキュメント:たとえば

、自分の殻に:FLUSHALLはoverkであってもよいこと

redis-cli flushall 
+78

シェルから: 'redis-cli flushall' – Cmag

+1

上記を試してみると、'(エラー)読み込み中にRedisがメモリ内のデータセットをロードしています '。理由を指定できますか? –

+3

@Ramswaroop - Redisを再起動し、現在、永続ストレージからデータをロードしています。このプロセス(読み込み)がアクティブな間は、DBを操作することはできません。それが完了するのを待つか、または永続性を持たないRedisを構成して再起動します(空になってからFLUSHALLを起動する必要はありません)。 –

159

ヘッズアップ病気FLUSHDBは、データベースのみをフラッシュするものです。 FLUSHALLはサーバー全体を消去します。サーバー上のすべてのデータベースと同様です。質問はデータベースをフラッシュすることに関するものだったので、これは別の答えに値する重要な違いだと思う。

+2

+1、私はこれが実際にはより良い答えだと思いました。確かに、OPの質問には「すべてを拭いてください」と書かれていますが、それに続いて「空のデータベースを教えてください」 - 実際に何を意味していたとしても、あなたが作った区別は、 – doug

+0

答えは「flushallが過度なものになる可能性がある」と答えてください。 – Gokul

13

あなたはRedisの-RB宝石を使用しているなら、あなたは簡単に呼び出すことができます。

your_redis_client.flushdb 
21

回答は、これまで絶対に正しいです。彼らはすべてのキーを削除します。あなたはまた、RedisのインスタンスからすべてのLuaのスクリプトを削除したい場合は

しかし、あなたはでそれに従う必要があります。

SCRIPT FLUSH

OPは二つの質問を尋ねます。これで2番目の質問が完了します(すべて)。

+3

いいえ、彼は1つの質問をして、2年後、レディスの範囲が拡大しました。 OPの質問は、具体的にはキーの削除に関するものでした。あなたはこれとは別の質問に答えています。 –

+11

@ TheRealBill現在および将来のSO読者に役立つものについて考える必要があります。ここの答えは、OPの「私はすべてが消えて空のデータベースを与えたい」という問題に対処していませんでした。質問_anymore_。だから、イーホー、私の仲間入りはいい人です。それは少数の人を助けました。もちろん、やりとりに同意しないでください、それはSOについてです。 –

+1

コンテキストがすべてであり、最初の文で「すべてのキーを削除したい」と設定されています。別の答えを出すために質問を書いているのは、私が言っていることではないということです。それは与えられた質問を尋ねることです - したがって、レビュー中の答えを示す緩和フラグは別の質問に答えています。しかし、意見は異なります。 –

7

FLUSHALL 現在のデータベース

SCRIPT FLUSH からすべてのキーを削除し、すべてのデータベースから

FLUSHDB をすべてのキーを削除するスクリプトキャッシュからすべてのスクリプトを削除します。

2

FLUSHALLを使用すると、すべてのデータベースのすべてのキーが削除されます。 ここで、FLUSHDBは現在のデータベースからすべてのキーを削除します。私の側から

4

つ以上のオプション:

生産とプリプロダクションデータベース内のキーの数千人があります。いくつかのキー(いくつかのマスクによって)を削除し、いくつかの基準などで修正する必要があります。もちろん、特にシャーディング(各物理的に512論理dbs)を持つCLIから手動で行う方法はありません。

この目的のために、私はこのすべての作業を行うJavaクライアントツールを作成します。

public class DataCleaner { 

    public static void main(String args[]) { 
     String keyPattern = args[0]; 
     String host = args[1]; 
     int port = Integer.valueOf(args[2]); 
     int dbIndex = Integer.valueOf(args[3]); 

     Jedis jedis = new Jedis(host, port); 

     int deletedKeysNumber = 0; 
     if(dbIndex >= 0){ 
      deletedKeysNumber += deleteDataFromDB(jedis, keyPattern, dbIndex); 
     } else { 
      int dbSize = Integer.valueOf(jedis.configGet("databases").get(1)); 
      for(int i = 0; i < dbSize; i++){ 
       deletedKeysNumber += deleteDataFromDB(jedis, keyPattern, i); 
      } 
     } 

     if(deletedKeysNumber == 0) { 
      System.out.println("There is no keys with key pattern: " + keyPattern + " was found in database with host: " + host); 
     } 
    } 

    private static int deleteDataFromDB(Jedis jedis, String keyPattern, int dbIndex) { 
     jedis.select(dbIndex); 
     Set<String> keys = jedis.keys(keyPattern); 
     for(String key : keys){ 
      jedis.del(key); 
      System.out.println("The key: " + key + " has been deleted from database index: " + dbIndex); 
     } 

     return keys.size(); 
    } 

} 

は、私は非常に簡単に見つけないと、5〜10分、その後、それ以上費やすのツールのような種類の書き込み:キーの場合は削除ユーティリティは、そこだけ一つのクラスは非常にシンプルにすることができます。

6

このメソッドは私のために働いた - あなたのJedisクラスタ上の現在接続されているデータベースのすべてを削除します。

public static void resetRedis() { 
    jedisCluster = RedisManager.getJedis(); // your JedisCluster instance 

    for (JedisPool pool : jedisCluster.getClusterNodes().values()) { 

     try (Jedis jedis = pool.getResource()) { 
      jedis.flushAll(); 
     } 
     catch (Exception ex){ 
      System.out.println(ex.getMessage()); 
     } 
    } 

} 
2

FLUSHALL既存のすべてのデータベースのすべてのキーを削除します。 Redisのバージョン> 4.0のために、FLUSHALL ASYNCがサーバ https://redis.io/commands/flushall

FLUSHDBを遮断wjthoutバックグラウンドスレッドで実行され、サポートされては - 選択したデータベース内のすべてのキーを削除します。 https://redis.io/commands/flushdb

操作を実行する時間の複雑さはO(N)(Nはデータベース内のキーの数)です。他のRedisからの応答が(Redisの4.0.0またはそれ以上)を使用している場合は、単純な文字列 "OK"

0

私は時々停止すると思いますredis-serverを実行し、rdb、aofファイルを削除してください。 リロードできるデータがないことを確認してください。 次に、redis-serverを起動します。新しいサーバは空です。

1
  1. Redisインスタンスを停止します。
  2. RDBファイルを削除します。
  3. Redisインスタンスを開始します。
1

redis-cli -h <host> -p <port> flushall

それは `デル*`は動作しませんなぜ私が疑問に思う