すべてのキーを削除したい私はすべてを一掃して私に空のデータベースを与えたいのです。
Redis clientでこれを行う方法はありますか?
FLUSHALL
はやり過ぎるかもしれないことを頭に入れてください。 FLUSHDB
はデータベースのみをフラッシュするためのものです。 FLUSHALL
はサーバー全体を一掃します。サーバー上のすべてのデータベースと同じです。質問はデータベースのフラッシュに関するものだったので、これは別の答えに値するほど十分に重要な区別だと思います。
今のところ答えは絶対に正しいです。彼らはすべてのキーを削除します。
ただし、Redisインスタンスから Lua スクリプトもすべて削除する場合は、次の手順に従ってください。
OPは2つの質問をします。これで2番目の質問(すべてwiped)は終了です。
_ flushall _ すべてのデータベースからすべてのキーを削除
_ flushdb _ 現在のデータベースからすべてのキーを削除する
SCRIPT FLUSH スクリプトキャッシュからすべてのスクリプトを削除します。
もしあなたがredis-rb gemを使っているならば、あなたは単に呼ぶことができます:
your_redis_client.flushdb
この方法は私にとってはうまくいきました - あなたの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());
}
}
}
私の側からもう一つのオプション:
私たちのプロダクションデータベースとプリプロダクションデータベースには、何千もの鍵があります。時々、いくつかのキーを(いくつかのマスクで)削除し、いくつかの基準などで変更する必要があります。もちろん、特にシャーディング(各物理で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分以上を費やしません。
FLUSHALL既存のすべてのデータベースのすべてのキーを削除します。 Redisバージョン> 4.0以降では、FLUSHALL ASYNCがサポートされ、サーバーをブロックすることなくバックグラウンドスレッドで実行されます https://redis.io/commands/flushall
FLUSHDB - 選択したデータベース内のすべてのキーを削除します。 https://redis.io/commands/flushdb
操作を実行するための時間の複雑さは、O(N)になります。ここで、Nはデータベース内のキーの数です。
Redisからの応答は単純な文字列 "OK"になります。
使用する場合はFLUSHALL ASYNCを使用する(Redis 4.0.0以降)それ以外の場合はFLUSHALL
あなたはあなたのすべてのデータベースからすべてのキーを削除するFLUSHALLを使うことができます。 FLUSHDBは現在のデータベースからすべてのキーを削除します。
redis-cli -h <Host> -p <port> flushall
それは接続されたクライアントからすべてのデータを削除します(ホストとポートで)
私は時々redis-serverを止めてrdbを削除すると思います。aof files。それから、redis-serverを起動してください。今、それは新しくて空です。
service redis-server start --port 8000
またはredis-server
を使用してRedisサーバーを起動した後。
別の端末でクライアントとしてサーバーに接続するにはredis-cli -p 8000
を使用します。
どちらでも使えます
両方の _ 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')
Redis-cliを開き、次のように入力します。
FLUSHALL
あなたの質問はデータベースのキー全体を削除することにあるようです。この場合、試してみるべきです:
redis-cli
を使用できます。それ以外の場合は、ポート番号も指定する必要があります。select {Index}
)flushdb
コマンドを実行するすべてのデータベースのキーをフラッシュしたい場合は、flushall
を試してください。
さまざまなアプローチがあります。あなたがリモートからこれをしたいならば、コマンドラインツール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
FastoRedis / FastoNoSQL でワンクリック
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
あなたがRDM(Redis Desktop Manager)を持つことができるならば、それはより良いです。 RDMで新しい接続を作成することによって、あなたのredisサーバーに接続することができます。
接続したら、ライブデータを確認できます。また、任意のredisコマンドで再生できます。
RDMでクリップを開く.
1)接続を右クリックするとコンソールオプションが表示されます。それをクリックするとRDMの下部に新しいコンソールウィンドウが開きます。
あなたの質問に戻るFLUSHALLはコマンドです、あなたは単にredis cliでFLUSHALLをタイプすることができます。
さらに、redisコマンドとその正しい使い方について知りたい場合は、以下のリンクにアクセスしてください。 https://redis.io/commands 。