我想删除所有密钥。我希望一切都消失,并给我一个空白的数据库。
有没有办法在Redis客户端中执行此操作?
答案 0 :(得分:1110)
使用redis-cli:
Redis文档:
例如,在你的shell中:
redis-cli flushall
答案 1 :(得分:184)
抬头FLUSHALL
可能有点矫枉过正。 FLUSHDB
是仅刷新数据库的那个。 FLUSHALL
将清除整个服务器。与服务器上的每个数据库一样。由于问题是关于刷新数据库,我认为这是一个非常重要的区别,值得单独回答。
答案 2 :(得分:27)
答案 3 :(得分:16)
答案 4 :(得分:15)
如果您正在使用redis-rb gem,那么您只需致电:
your_redis_client.flushdb
答案 5 :(得分:10)
此方法对我有用 - 删除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());
}
}
}
答案 6 :(得分:7)
我身边的另一个选择:
在我们的生产和预生产数据库中,有数千个密钥。我们需要不时删除一些键(通过某些掩码),按某些标准修改等等。当然,没有办法从CLI手动执行,特别是有分片(每个物理中有512个逻辑dbs)。
为此,我编写了完成所有这些工作的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分钟。
答案 7 :(得分:5)
FLUSHALL删除所有现有数据库的所有键。 FOr Redis版本&gt; 4.0,支持FLUSHALL ASYNC,它在后台线程中运行,不会阻塞服务器 https://redis.io/commands/flushall
FLUSHDB - 删除所选数据库中的所有密钥。 https://redis.io/commands/flushdb
执行操作的时间复杂度为O(N),其中N是数据库中键的数量。
redis的响应将是一个简单的字符串“OK”
答案 8 :(得分:4)
您可以使用FLUSHALL删除每个数据库中的所有密钥。 FLUSHDB将删除当前数据库中的所有密钥。
答案 9 :(得分:4)
如果使用(Redis 4.0.0或更高版本),请使用FLUSHALL ASYNC,否则使用FLUSHALL
答案 10 :(得分:3)
答案 11 :(得分:2)
redis-cli -h <host> -p <port> flushall
它将从连接的客户端(使用主机和端口)删除所有数据
答案 12 :(得分:2)
我认为有时会停止redis-server并删除rdb,aof文件。 确保没有数据可以重新加载。 然后启动redis-server,现在它是新的并且是空的。
答案 13 :(得分:1)
使用以下内容启动Redis服务器后:service redis-server start --port 8000
或redis-server
。
使用redis-cli -p 8000
作为不同终端中的客户端连接到服务器。
您可以使用
检查两者的 ASYNC 选项的文档。
如果您通过其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')
答案 14 :(得分:1)
打开redis-cli并输入:
FLUSHALL
答案 15 :(得分: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
答案 16 :(得分:1)
这对我有用:redis-cli KEYS \* | xargs --max-procs=16 -L 100 redis-cli DEL
它列出了redis中的所有密钥,然后使用xargs传递给redis-cli DEL,每个命令最多使用100个密钥,但是由于安全原因,在没有FLUSHDB或FLUSHALL的情况下,一次运行16个命令非常快速且有用,例如,在Docker或Kubernetes中使用Bitnami的Redis。而且,它不需要任何其他编程语言,而只需一行。
答案 17 :(得分:1)
你可以在终端中使用flushall
redis-cli> flushall
答案 18 :(得分:0)
您的问题似乎与删除数据库中的整个密钥有关。在这种情况下,您应该尝试:
redis-cli
(如果在端口6379上运行),否则还必须指定端口号。select {Index}
)flushdb
如果要刷新所有数据库中的键,则应尝试flushall
。
答案 19 :(得分:0)
最好具有RDM(Redis桌面管理器)。 您可以通过在RDM中创建新连接来连接到Redis服务器。
连接后,您可以检查实时数据,也可以使用任何redis命令进行播放。
在RDM中打开cli。
1)右键单击连接,您将看到一个控制台选项,只需单击它,一个新的控制台窗口将在RDM的底部打开。
回到您的问题,命令是FLUSHALL,您只需在redis cli中键入FLUSHALL。
此外,如果您想了解任何redis命令及其正确用法,请转到下面的链接。 https://redis.io/commands。
答案 20 :(得分:0)
有不同的方法。如果要从远程执行此操作,请通过命令行工具redis-cli或任何工具(即telnet,一种编程语言SDK)向该实例发出flushall。或者只是登录该服务器,终止该进程,删除其dump.rdb文件和appendonly.aof(在删除之前备份它们)。
答案 21 :(得分:0)
点击FastoRedis / FastoNoSQL
答案 22 :(得分:0)
您可以使用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
答案 23 :(得分: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
答案 24 :(得分:0)
如果你想在windows中清除redis: 在
中找到redis-cli <块引用>C:\Program Files\Redis 并运行 FLUSHALL 命令。