すべてのキーを削除したい。私はすべてを一掃したいし、空のデータベースをください。
Redisクライアントでこれを行う方法はありますか?
すべてのキーを削除したい。私はすべてを一掃したいし、空のデータベースをください。
Redisクライアントでこれを行う方法はありますか?
回答:
redis-cliを使用する場合:
たとえば、シェルで:
redis-cli flushall
(error) LOADING Redis is loading the dataset in memory
。理由を特定できますか?
(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
フラグを使用してredisサーバーの場所を指定します
これまでの答えは完全に正しいです。すべてのキーを削除します。
ただし、RedisインスタンスからすべてのLuaスクリプトも削除する場合は、次の手順に従う必要があります。
OPは2つの質問をします。これで2番目の質問が完了しました(すべてが消去されます)。
I want everything wiped out and give me a blank database.
質問にはもはや対応していません。だから、私見、私の追加はいくつかの人々を助けてきた良いものです。もちろん、意見の相違があっても構いません。それは、SOの目的でもあります。
FLUSHALL すべてのデータベースからすべてのキーを削除します
FLUSHDB 現在のデータベースからすべてのキーを削除します
SCRIPT FLUSH スクリプトキャッシュからすべてのスクリプトを削除します。
この方法でうまくいきました。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以降)を使用する場合はelseを使用しますFLUSHALL
。
https://redis.io/commands/flushall
注:実行前のすべてFLUSHALL ASYNC
が削除されます。実行中に行われた変更はFLUSHALL ASYNC
影響を受けません。
redis-cliを開き、次のように入力します。
FLUSHALL
時々、redis-serverを停止して、rdb、aofファイルを削除すると思います。再読み込みできるデータがないことを確認してください。次に、redis-serverを起動します。これで、新しく空になりました。
Redisサーバーを起動した後:service redis-server start --port 8000
またはを使用しますredis-server
。
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')
FastoRedis / FastoNoSQLでワンクリック
使用できます 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
あなたは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
RDM(Redis Desktop Manager)を使用できる場合は、さらに良い方法です。RDMで新しい接続を作成することにより、redisサーバーに接続できます。
接続したら、ライブデータを確認できます。また、redisコマンドを試してみることができます。
RDMでCLIを開きます。
1)接続を右クリックすると、コンソールオプションが表示されます。クリックすると、RDMの下部に新しいコンソールウィンドウが開きます。
質問に戻ると、FLUSHALLがコマンドです。rediscliでFLUSHALLと入力するだけです。
さらに、redisコマンドとその適切な使用法について知りたい場合は、以下のリンクにアクセスしてください。 https://redis.io/commands。
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
del *
動かないのかしら。これは、0を返します