630

すべてのキーを削除したい私はすべてを一掃して私に空のデータベースを与えたいのです。

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


  • なぜだろうかdel *動作しません。 0を返します。 - Chloe

19 답변


1059

redis-cliを使うと:

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

Redisのドキュメント:

たとえば、あなたのシェルでは:

redis-cli flushall


  • シェルから:redis-cli flushall - Cmag
  • 私が上記を試みるとき、私は以下のエラーを得ます(error) LOADING Redis is loading the dataset in memory。その理由を教えてください。 - Ram Patra
  • @Ramswaroop - Redisを再起動しましたが、現在永続ストレージからデータをロードしています。このプロセス(読み込み中)がアクティブな間は、DBを操作できません。それが完了するのを待つか、Redis w / o persistenceを設定して再起動してください(空になってしまいますので、起動したらFLUSHALLを行う必要はありません)。 - Itamar Haber
  • @Neo C#にredisクライアントライブラリがない場合は、次のように単純にそのコマンドを実行できます。(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start(); - Christian
  • 使用-hRedisサーバーの場所を指定するためのフラグ - Adam F

178

それをヘッズアップFLUSHALLやり過ぎかもしれません。FLUSHDBデータベースのみをフラッシュするものです。FLUSHALLサーバー全体を一掃します。サーバー上のすべてのデータベースと同じです。質問はデータベースをフラッシュすることに関するものだったので、これは別の答えに値するほど十分に重要な区別だと思います。


  • +1私から、私はこれが実際にはより良い答えだと思いました。確かに、OPの質問には、「すべてを抹消する」と書かれています。しかし、その後に「空のデータベースを用意してください」と続きます - 彼が実際に何を意味していたとしても、控えめに言っても、あなたが行った区別は役に立つと思います。 - doug
  • その答えは、「#flushallはやり過ぎるかもしれません。」と読む必要があります。 - Gokul

26

今のところ答えは絶対に正しいです。彼らはすべてのキーを削除します。

ただし、すべて削除したい場合取りますRedisインスタンスからスクリプトを作成する場合は、以下の手順に従ってください。

SCRIPT FLUSH

OPは2つの質問をします。これで2番目の質問は完了です(すべてのもの拭いた。


  • いいえ、彼は1つの質問をしました、それ以来2年間でRedisの範囲は広がりました。 OPの質問は、特にキーの削除に関するものでした。あなたはこの質問とは別の質問に答えています。 - The Real Bill
  • @TheRealBill現在および将来のSO読者にとって何が役に立つかを考えなければなりません。ここでの回答では、OPに対処することはできませんでしたI want everything wiped out and give me a blank database.質問もう。だから、私見、私の追加は良いもので、それは少数の人々を助けました。もちろん、同意しないこともお忘れなく。 - Tw Bert
  • コンテキストがすべてであり、最初の文がそれを確立します。「すべてのキーを削除します」。別の答えを出すために質問を書き換えることは、私がSOに言っていることではありません。それは与えられた質問をすることについてです - それゆえレビュー中の答えを示すモデレーションフラグは異なる質問に答えています。しかし、意見は異なります。 - The Real Bill
  • あなたの意見は注目に値する、THX。言っ途切れる。 - Tw Bert
  • 自分でサーバーを実行している場合、すべてを拭く最も簡単な方法は、サーバーを強制終了して再起動することです(誤ってこれを見つけました) - acutesoftware

15

もしあなたがredis-rb gemを使っているならば、あなたは単に呼ぶことができます:

your_redis_client.flushdb


11

フラッシュすべてのデータベースからすべてのキーを削除する

FLUSHDB現在のデータベースからすべてのキーを削除します

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


9

この方法は私にはうまくいきました - あなたの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());
        }
    }

}


6

私の側からもう一つのオプション:

本番データベースおよび本番前データベースには、何千もの鍵があります。時々、いくつかのキーを(いくつかのマスクで)削除し、いくつかの基準などで変更する必要があります。もちろん、特にシャーディング(各物理で512論理DB)があるため、CLIから手動で行う方法はありません。

この目的のために、私はこれをすべて行うJavaクライアントツールを書きます。キーを削除する場合、ユーティリティは非常に単純なものになることがあります。1つのクラスだけがあります。

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分以上を費やすことはありません。


5

FLUSHALL既存のすべてのデータベースのすべてのキーを削除します。 Redisバージョン4.0以降では、FLUSHALL ASYNCがサポートされ、サーバーをブロックすることなくバックグラウンドスレッドで実行されます。https://redis.io/commands/flushall

FLUSHDB - 選択したデータベース内のすべてのキーを削除します。https://redis.io/commands/flushdb

操作を実行するための時間の複雑さはO(N)になります。ここで、Nはデータベース内のキーの数です。

redisからの応答は単純な文字列 "OK"になります。


4

あなたはあなたのすべてのデータベースからすべてのキーを削除するFLUSHALLを使うことができます。 FLUSHDBは現在のデータベースからすべてのキーを削除します。


4

使用する場合はFLUSHALL ASYNCを使用する(Redis 4.0.0以降)それ以外の場合はFLUSHALL

https://redis.io/commands/flushall


3

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


2

私は時々redis-serverを止めてrdb、aof filesを削除すると思います。 データを再ロードできないことを確認してください。 それから、redis-serverを起動してください。今、それは新しくて空です。


2

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

接続されているクライアント(ホストとポート)からすべてのデータを削除します。


1

Redisサーバーを起動した後は、service redis-server start --port 8000またはredis-server

つかいますredis-cli -p 8000別の端末でクライアントとしてサーバーに接続します。

どちらでも使えます

  1. FLUSHDB - 現在選択されているDBのすべてのキーを削除します。このコマンドは失敗しません。この操作の時間の複雑さはO(N)です。ここで、Nはデータベース内のキーの数です。
  2. フラッシュ - 現在選択されているデータベースだけでなく、すべての既存データベースのすべてのキーを削除します。このコマンドは失敗しません。この操作の時間の複雑さはO(N)です。ここで、Nはすべての既存データベースのキー数です。

のドキュメントを確認してください。ASYNC両方のためのオプション。

あなたがそのpythonインターフェースを通してRedisを使っているならば、同じ機能のためにこれらの2つの機能を使ってください:

def flushall(self):
    "Delete all keys in all databases on the current host"
    return self.execute_command('FLUSHALL')

そして

def flushdb(self):
    "Delete all keys in the current database"
    return self.execute_command('FLUSHDB')


1

redis-cliを開き、次のように入力します。

FLUSHALL


  • あなたの投稿は質問に答えるかもしれませんが、それはいくつかのドキュメンテーションを欠いています。あなたの答えを編集してそれらを提供してください。 - hellow

0

あなたの質問はデータベースのキー全体を削除することにあるようです。この場合、試すべきです:

  1. redisに接続してください。あなたはコマンドを使用することができますredis-cli(ポート6379で実行している場合)、それ以外の場合はポート番号も指定する必要があります。
  2. データベースを選択してください(コマンドselect {Index}
  3. コマンドを実行するflushdb

すべてのデータベースのキーをフラッシュしたい場合は、試してみてください。flushall


0

あなたがRDM(Redis Desktop Manager)を持つことができるならば、それはより良いです。 RDMで新しい接続を作成することによって、あなたのredisサーバーに接続することができます。

接続したら、ライブデータを確認できます。また、redisコマンドを使用して再生することもできます。

RDMでクリップを開く

1)接続を右クリックするとコンソールオプションが表示されます。クリックするとRDMの下部に新しいコンソールウィンドウが開きます。

あなたの質問に戻るFLUSHALLはコマンドです、あなたは単にredis cliにFLUSHALLをタイプすることができます。

さらに、redisコマンドとその正しい使い方について知りたい場合は、以下のリンクにアクセスしてください。https://redis.io/commands


0

さまざまなアプローチがあります。リモートからこれを実行したい場合は、そのインスタンスにflushallを発行してください。コマンドラインツールのredis-cliまたは他のツール(telnet、プログラミング言語SDKなど)を使用してください。またはそのサーバーにログインし、プロセスを強制終了し、そのdump.rdbファイルを削除してappendonly.aof(削除する前にそれらをバックアップしてください)。


0

ワンクリックFastoRedis/FastoNoSQL

enter image description here

リンクされた質問


関連する質問

最近の質問