我想删除所有密钥 . 我希望一切都消失,给我一个空白的数据库 .
有没有办法在Redis客户端中执行此操作?
到目前为止的答案绝对正确;他们删除所有密钥 .
但是,如果您还想从Redis实例中删除所有Lua脚本,则应遵循以下方法:
SCRIPT FLUSH
OP提出两个问题;这完成了第二个问题( everything 擦除) .
打开redis-cli并输入:
FLUSHALL
抬头说 FLUSHALL 可能有点矫枉过正 . FLUSHDB 是仅刷新数据库的那个 . FLUSHALL 将清除整个服务器 . 与服务器上的每个数据库一样 . 由于问题是关于刷新数据库,我认为这是一个非常重要的区别,值得单独回答 .
FLUSHDB
您可以使用FLUSHALL删除每个数据库中的所有密钥 . FLUSHDB将删除当前数据库中的所有键 .
您的问题似乎是删除数据库中的整个密钥 . 在这种情况下,你应该尝试:
连接到redis . 您可以使用命令 redis-cli (如果在端口6379上运行),否则您还必须指定端口号 .
redis-cli
选择您的数据库(命令 select {Index} )
select {Index}
执行命令 flushdb
flushdb
如果要刷新所有数据库中的密钥,则应尝试 flushall .
flushall
我想有时会停止redis-server并删除rdb,aof文件 . 确保没有数据可以重新加载 . 然后启动redis-server,现在它是新的并且是空的 .
这种方法对我有用 - 删除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()); } } }
如果你有RDM(Redis桌面管理器),它会更好 . 您可以通过在RDM中创建新连接来连接到redis服务器 .
连接后,您可以检查实时数据,也可以使用任何redis命令 .
在RDM中打开cli .
1)右键单击连接,您将看到一个控制台选项,只需单击它就会在RDM底部打开一个新的控制台窗口 .
回到你的问题FLUSHALL是命令,你只需在redis cli中键入FLUSHALL即可 .
此外,如果您想了解任何redis命令及其正确用法,请转到下面的链接 . https://redis.io/commands .
FLUSHALL从所有数据库中删除所有密钥
FLUSHDB从当前数据库中删除所有密钥
SCRIPT FLUSH从脚本缓存中删除所有脚本 .
redis-cli -h <host> -p <port> flushall
它将从连接的客户端删除所有数据(使用主机和端口)
如果使用(Redis 4.0.0或更高版本),请使用FLUSHALL ASYNC,否则使用FLUSHALL
https://redis.io/commands/flushall
我方还有一个选择:
在我们的 生产环境 和预 生产环境 数据库中,有数千个密钥 . 我们需要不时删除一些键(通过某些掩码),按某些标准修改等等 . 当然,没有办法从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分钟 .
使用以下命令启动Redis服务器后: service redis-server start --port 8000 或 redis-server .
service redis-server start --port 8000
redis-server
使用 redis-cli -p 8000 作为不同终端中的客户端连接到服务器 .
redis-cli -p 8000
你可以使用其中之一
FLUSHDB - 删除当前所选数据库的所有键 . 此命令永远不会失败 . 此操作的时间复杂度为O(N),N是数据库中的键数 .
FLUSHALL - 删除所有现有数据库的所有键,而不仅仅是当前选定的数据库 . 此命令永远不会失败 . 此操作的时间复杂度为O(N),N是所有现有数据库中的键数 .
检查两者的文档 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')
单击FastoRedis / FastoNoSQL
如果您使用的是redis-rb gem,那么您只需调用:
your_redis_client.flushdb
有不同的方法 . 如果你想从远程执行此操作,请通过命令行工具redis-cli或任何工具(即telnet,编程语言SDK)向该实例发出flushall . 或者只需登录该服务器,终止进程,删除其dump.rdb文件和appendonly.aof(在删除前备份它们) .
使用redis-cli:
FLUSHDB - 从连接的CURRENT数据库中删除数据 .
FLUSHALL - 从所有数据库中删除数据 .
Redis文档:
例如,在你的shell中:
redis-cli flushall
停止Redis实例 .
删除RDB文件 .
启动Redis实例 .
FLUSHALL删除所有现有数据库的所有键 . FOr Redis版本> 4.0,支持FLUSHALL ASYNC,它在后台线程中运行,不会阻塞服务器https://redis.io/commands/flushall
FLUSHDB - 删除所有密钥选定的数据库 . https://redis.io/commands/flushdb
执行操作的时间复杂度将是O(N),其中N是数据库中的密钥数 .
来自redis的响应将是一个简单的字符串“OK”
19 回答
到目前为止的答案绝对正确;他们删除所有密钥 .
但是,如果您还想从Redis实例中删除所有Lua脚本,则应遵循以下方法:
SCRIPT FLUSH
OP提出两个问题;这完成了第二个问题( everything 擦除) .
打开redis-cli并输入:
抬头说
FLUSHALL
可能有点矫枉过正 .FLUSHDB
是仅刷新数据库的那个 .FLUSHALL
将清除整个服务器 . 与服务器上的每个数据库一样 . 由于问题是关于刷新数据库,我认为这是一个非常重要的区别,值得单独回答 .您可以使用FLUSHALL删除每个数据库中的所有密钥 . FLUSHDB将删除当前数据库中的所有键 .
您的问题似乎是删除数据库中的整个密钥 . 在这种情况下,你应该尝试:
连接到redis . 您可以使用命令
redis-cli
(如果在端口6379上运行),否则您还必须指定端口号 .选择您的数据库(命令
select {Index}
)执行命令
flushdb
如果要刷新所有数据库中的密钥,则应尝试
flushall
.我想有时会停止redis-server并删除rdb,aof文件 . 确保没有数据可以重新加载 . 然后启动redis-server,现在它是新的并且是空的 .
这种方法对我有用 - 删除Jedis集群上当前连接的数据库的所有内容 .
如果你有RDM(Redis桌面管理器),它会更好 . 您可以通过在RDM中创建新连接来连接到redis服务器 .
连接后,您可以检查实时数据,也可以使用任何redis命令 .
在RDM中打开cli .
1)右键单击连接,您将看到一个控制台选项,只需单击它就会在RDM底部打开一个新的控制台窗口 .
回到你的问题FLUSHALL是命令,你只需在redis cli中键入FLUSHALL即可 .
此外,如果您想了解任何redis命令及其正确用法,请转到下面的链接 . https://redis.io/commands .
FLUSHALL从所有数据库中删除所有密钥
FLUSHDB从当前数据库中删除所有密钥
SCRIPT FLUSH从脚本缓存中删除所有脚本 .
redis-cli -h <host> -p <port> flushall
它将从连接的客户端删除所有数据(使用主机和端口)
如果使用(Redis 4.0.0或更高版本),请使用FLUSHALL ASYNC,否则使用FLUSHALL
https://redis.io/commands/flushall
我方还有一个选择:
在我们的 生产环境 和预 生产环境 数据库中,有数千个密钥 . 我们需要不时删除一些键(通过某些掩码),按某些标准修改等等 . 当然,没有办法从CLI手动完成,特别是有分片(每个物理中有512个逻辑dbs) .
为此我编写了java客户端工具来完成所有这些工作 . 如果删除密钥,实用程序可以非常简单,只有一个类:
写这样的工具我觉得很容易,花费不超过5-10分钟 .
使用以下命令启动Redis服务器后:
service redis-server start --port 8000
或redis-server
.使用
redis-cli -p 8000
作为不同终端中的客户端连接到服务器 .你可以使用其中之一
FLUSHDB - 删除当前所选数据库的所有键 . 此命令永远不会失败 . 此操作的时间复杂度为O(N),N是数据库中的键数 .
FLUSHALL - 删除所有现有数据库的所有键,而不仅仅是当前选定的数据库 . 此命令永远不会失败 . 此操作的时间复杂度为O(N),N是所有现有数据库中的键数 .
检查两者的文档 ASYNC 选项 .
如果您通过其python接口使用Redis,请将这两个函数用于相同的功能:
和
单击FastoRedis / FastoNoSQL
如果您使用的是redis-rb gem,那么您只需调用:
有不同的方法 . 如果你想从远程执行此操作,请通过命令行工具redis-cli或任何工具(即telnet,编程语言SDK)向该实例发出flushall . 或者只需登录该服务器,终止进程,删除其dump.rdb文件和appendonly.aof(在删除前备份它们) .
使用redis-cli:
FLUSHDB - 从连接的CURRENT数据库中删除数据 .
FLUSHALL - 从所有数据库中删除数据 .
Redis文档:
flushdb
flushall
例如,在你的shell中:
停止Redis实例 .
删除RDB文件 .
启动Redis实例 .
FLUSHALL删除所有现有数据库的所有键 . FOr Redis版本> 4.0,支持FLUSHALL ASYNC,它在后台线程中运行,不会阻塞服务器https://redis.io/commands/flushall
FLUSHDB - 删除所有密钥选定的数据库 . https://redis.io/commands/flushdb
执行操作的时间复杂度将是O(N),其中N是数据库中的密钥数 .
来自redis的响应将是一个简单的字符串“OK”