如何删除Redis中的所有内容?
我想删除所有的密钥。 我希望一切都消失了,给我一个空白的数据库。
有没有办法在Redis客户端做到这一点?
使用redis-cli:
- FLUSHDB – 从连接的CURRENT数据库中删除数据。
- FLUSHALL – 从所有数据库中删除数据。
Redis文档:
- flushdb
- flushall
例如,在你的shell中:
redis-cli flushall
抬头, FLUSHALL
可能会矫枉过正。 FLUSHDB
是只刷新数据库的FLUSHDB
。 FLUSHALL
将清除整个服务器。 就像服务器上的每个数据库一样。 由于这个问题是关于冲洗一个数据库,我认为这是一个足够重要的区别,值得单独的答案。
迄今为止的答案是绝对正确的。 他们删除所有的密钥。
但是,如果您还想从Redis实例中删除所有Lua脚本,则应遵循以下步骤:
脚本刷新
选举委员会提出两个问题; 这完成了第二个问题(抹去的一切 )。
如果你使用的是redis-rb gem,那么你可以直接调用:
your_redis_client.flushdb
FLUSHALL删除所有数据库中的所有密钥
FLUSHDB从当前数据库中删除所有密钥
SCRIPT FLUSH从脚本caching中删除所有脚本。
这个方法适用于我 – 删除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()); } } }
我的另一个select:
在我们的生产和预生产数据库中有数千个密钥。 有时候我们需要删除一些密钥(通过掩码),修改一些标准等。当然,没有办法从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(); } }
写这样的工具,我觉得很容易,花费不了多less,然后5-10分钟。
你可以使用FLUSHALL这将删除你的每个数据库中的所有密钥。 FLUSHDB将从我们当前的数据库中删除所有密钥。
FLUSHALL删除所有存在的数据库的所有键。 如果Redis的版本大于4.0,则支持FLUSHALL ASYNC,后台线程运行在不阻止服务器的情况下https://redis.io/commands/flushall
FLUSHDB – 删除选定数据库中的所有键。 https://redis.io/commands/flushdb
执行操作的时间复杂度将是O(N),其中N是数据库中的键的数量。
来自redis的响应将是一个简单的string“OK”
如果使用(Redis 4.0.0或更高版本),则使用FLUSHALL ASYNC FLUSHALL
我想有时会停止redis-server并删除rdb,aof文件,确保没有数据可以重新加载。 然后启动redis服务器,现在它是新的和空的。
- 停止Redis实例。
- 删除RDB文件。
- 启动Redis实例。
redis-cli -h <host> -p <port> flushall
它将删除客户端连接的所有数据(主机和端口)