Redisのすべてを削除するにはどうすればよいですか?


711

すべてのキーを削除したい。私はすべてを一掃したいし、空のデータベースをください。

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


3
なぜdel *動かないのかしら。これは、0を返します
クロエ

1
redisサーバーを再起動すると、その中のすべてのデータが消去されます、rit ?? @Timex
AATHITH RAJENDRAN

回答:


1178

redis-cliを使用する場合:

  • FLUSHDB –接続の現在のデータベースからすべてのキーを削除します。
  • FLUSHALL –すべてのデータベースからすべてのキーを削除します。

たとえば、シェルで:

redis-cli flushall

1
上記を試すと、次のエラーが発生します(error) LOADING Redis is loading the dataset in memory。理由を特定できますか?
Ram Patra 2014年

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

@ItamarHaber助けてくれてありがとう、私も同じことを理解しました。
Ram Patra 2014年

1
:あなたがC#でRedisのクライアントライブラリを持っていない@Neo場合は、単にそのように、そのコマンドを実行することができます (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
キリスト教の

2
-hフラグを使用してredisサーバーの場所を指定します
Adam F

194

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


4
私からの+1、これは実際にはより良い答えだと思いました。確かに、OPの質問には「すべてを消去する」と書かれていますが、その後に「空のデータベースをくれ」と書かれています。
11

28

これまでの答えは完全に正しいです。すべてのキーを削除します。

ただし、RedisインスタンスからすべてのLuaスクリプトも削除する場合は、次の手順に従う必要があります。

スクリプトフラッシュ

OPは2つの質問をします。これで2番目の質問が完了しました(すべてが消去されます)。


4
いいえ、彼は1つの質問をし、それから2年間でRedisの範囲が拡大しました。OPの質問は、特にキーの削除についてでした。あなたはこれとは別の質問に答えています。
リアルビル

15
@TheRealBill現在および将来のSOリーダーに何が役立つかについて考える必要があります。ここでの回答は、OPのI want everything wiped out and give me a blank database.質問にはもはや対応していませ。だから、私見、私の追加はいくつかの人々を助けてきた良いものです。もちろん、意見の相違があっても構いません。それは、SOの目的でもあります。
Tw Bert、2014年

2
コンテキストはすべてであり、最初の文はそれを確立します:「すべてのキーを削除したい」。別の答えを与えるために質問を書き直すことは、SOについての説明ではありません。それは与えられた質問をすることについてです-したがって、レビュー中の回答を示すモデレーションフラグは別の質問に回答しています。しかし、意見は異なります。
リアルビル

サーバーを自分で実行している場合は、すべてを拭くための最も簡単な方法は、サーバを強制終了して再起動することである(アウト偶然これを見つけた)
acutesoftware


15

redis-rb gemを使用している場合は、次のように呼び出すだけです。

your_redis_client.flushdb

11

この方法でうまくいきました。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());
        }
    }

}

7

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

私たちの運用データベースと運用前データベースには、何千ものキーがあります。場合によっては、いくつかのキー(マスクによって)を削除したり、いくつかの基準によって変更したりする必要があります。もちろん、特にシャーディング(各物理で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
  1. Redisインスタンスを停止します。
  2. RDBファイルを削除します。
  3. Redisインスタンスを起動します。

私の経験では、持続性がある場合は、実際にこの手順を実行し、すべての.aofファイルを削除して、redis-cli flushallを発行して、本当にすべてを削除する必要があります。
ywarnier


3

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

FLUSHALL

1
あなたの投稿は質問に答えるかもしれませんが、いくつかのドキュメントが不足しています。回答を編集して提供してください。
hellow

2

時々、redis-serverを停止して、rdb、aofファイルを削除すると思います。再読み込みできるデータがないことを確認してください。次に、redis-serverを起動します。これで、新しく空になりました。


2

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

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


2

Redisサーバーを起動した後:service redis-server start --port 8000またはを使用しますredis-server

redis-cli -p 8000別の端末でクライアントとしてサーバーに接続するために使用します。

どちらでも使えます

  1. FLUSHDB-現在選択されているDBのすべてのキーを削除します。このコマンドが失敗することはありません。この操作の時間の複雑さはO(N)で、Nはデータベース内のキーの数です。
  2. FLUSHALL-現在選択されているデータベースだけでなく、既存のすべてのデータベースのすべてのキーを削除します。このコマンドが失敗することはありません。この操作の時間の複雑さは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

あなたの質問は、データベース内のキー全体を削除することに関するもののようです。この場合、次のことを試してください。

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

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



1

使用できます FLUSHDB

例えば

データベースのリスト:

127.0.0.1:6379> info keyspace
# Keyspace

リストキー

127.0.0.1:6379> keys *
(empty list or set)

キーに値を1つ追加する

127.0.0.1:6379> lpush key1 1
(integer) 1
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=1,expires=0,avg_ttl=0

2つの値を持つ他のキーを作成する

127.0.0.1:6379> lpush key2 1
(integer) 1
127.0.0.1:6379> lpush key2 2
(integer) 2
127.0.0.1:6379> keys *
1) "key1"
2) "key2"
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=2,expires=0,avg_ttl=0

key2のすべての値をリストする

127.0.0.1:6379> lrange key2 0 -1
1) "2"
2) "1"

ドゥFLUSHDB

127.0.0.1:6379> flushdb
OK

キーとデータベースを一覧表示する

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> info keyspace
# Keyspace

keys *コマンドは高価なコマンドです。本番のredisサーバーではこのコマンドを実行しないでください
emert117

1

あなたはPythonで次のアプローチを使うことができます

def redis_clear_cache(self):

    try:
        redis_keys = self.redis_client.keys('*')
    except Exception as e:
        # print('redis_client.keys() raised exception => ' + str(e))
        return 1

    try:
        if len(redis_keys) != 0:
            self.redis_client.delete(*redis_keys)
    except Exception as e:
        # print('redis_client.delete() raised exception => ' + str(e))
        return 1

    # print("cleared cache")
    return 0

0

RDM(Redis Desktop Manager)を使用できる場合は、さらに良い方法です。RDMで新しい接続を作成することにより、redisサーバーに接続できます。

接続したら、ライブデータを確認できます。また、redisコマンドを試してみることができます。

RDMでCLIを開きます。

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

質問に戻ると、FLUSHALLがコマンドです。rediscliでFLUSHALLと入力するだけです。

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


0

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


0

Javaを使用している場合は、ドキュメントから、ユースケースに基づいてそれらのいずれかを使用できます。

/**
 * Remove all keys from all databases.
 *
 * @return String simple-string-reply
 */
String flushall();

/**
 * Remove all keys asynchronously from all databases.
 *
 * @return String simple-string-reply
 */
String flushallAsync();

/**
 * Remove all keys from the current database.
 *
 * @return String simple-string-reply
 */
String flushdb();

/**
 * Remove all keys asynchronously from the current database.
 *
 * @return String simple-string-reply
 */
String flushdbAsync();

コード:

RedisAdvancedClusterCommands syncCommands = // get sync() or async() commands 
syncCommands.flushdb();

続きを読む:https : //github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.