web-dev-qa-db-ja.com

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

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

Redis clientでこれを行う方法はありますか?

658
TIMEX

Redis-cliを使うと:

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

Redisのドキュメント:

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

redis-cli flushall
1104
Javier

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

183
The Real Bill

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

ただし、Redisインスタンスから Lua スクリプトもすべて削除する場合は、次の手順に従ってください。

SCRIPT FLUSH

OPは2つの質問をします。これで2番目の質問(すべてwiped)は終了です。

27
Tw Bert

_ flushall _ すべてのデータベースからすべてのキーを削除

_ flushdb _ 現在のデータベースからすべてのキーを削除する

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

16
Jain Rach

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

your_redis_client.flushdb
15
Ger

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

}
10
Kaidul

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

私たちのプロダクションデータベースとプリプロダクションデータベースには、何千もの鍵があります。時々、いくつかのキーを(いくつかのマスクで)削除し、いくつかの基準などで変更する必要があります。もちろん、特にシャーディング(各物理で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分以上を費やしません。

7
Denys

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

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

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

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

5

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

https://redis.io/commands/flushall

4
arnabmitra

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

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

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

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

2
gobi

私は時々redis-serverを止めてrdbを削除すると思います。aof files。それから、redis-serverを起動してください。今、それは新しくて空です。

2
tcrabsheen

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

別の端末でクライアントとしてサーバーに接続するには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
Archit Singh

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

FLUSHALL
1
behzad babaei

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

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

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

0
Raviraj Singh

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

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"

Do _ 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
0
xyz

FastoRedis / FastoNoSQL でワンクリック

enter image description here

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

0
roottraveller

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

接続したら、ライブデータを確認できます。また、任意のredisコマンドで再生できます。

RDMでクリップを開く.

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

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

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

0
Manvendra Jina