我要删除所有密钥。我希望一切都消灭,然后给我一个空白的数据库。
Redis客户端有办法做到这一点吗?
我要删除所有密钥。我希望一切都消灭,然后给我一个空白的数据库。
Redis客户端有办法做到这一点吗?
Answers:
(error) LOADING Redis is loading the dataset in memory
。您可以指定原因吗?
(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
标志指定redis服务器位置
I want everything wiped out and give me a blank database.
问题了。因此,恕我直言,我的加入是一项很好的工作,对一些人有所帮助。随意不同意课程,这也是SO的意义所在。
此方法对我有用-删除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());
}
}
}
我这边还有一个选择:
在我们的生产和生产前数据库中,有成千上万的密钥。我们有时需要删除一些键(通过某些掩码),通过某些条件进行修改等。当然,无法从CLI手动进行操作,尤其是具有分片(每个物理分区中有512个逻辑数据库)的情况。
为此,我编写了完成所有这些工作的Java客户端工具。在删除键的情况下,实用程序可能非常简单,那里只有一个类:
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
。
https://redis.io/commands/flushall
注意:执行之前的所有操作FLUSHALL ASYNC
都会被驱逐。执行期间所做的更改FLUSHALL ASYNC
将不受影响。
我认为有时会停止redis服务器并删除rdb,aof文件。确保没有数据可以重新加载。然后启动redis服务器,现在它是新的并且是空的。
在使用以下方式启动Redis服务器之后:service redis-server start --port 8000
或redis-server
。
用于redis-cli -p 8000
在另一个终端中作为客户端连接到服务器。
您可以使用
查阅两个文档的ASYNC选项。
如果您通过Redis的python界面使用Redis,请将以下两个功能用于相同的功能:
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
(如果在端口6379上运行),否则还必须指定端口号。select {Index}
)flushdb
如果要刷新所有数据库中的键,则应尝试flushall
。
一键单击FastoRedis / FastoNoSQL
您可以使用 FLUSHDB
例如
列出数据库:
127.0.0.1:6379> info keyspace
# Keyspace
清单键
127.0.0.1:6379> keys *
(empty list or set)
向键添加一个值
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
用两个值创建另一个键
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是命令,您只需在redis cli中键入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