我想删除所有的键。我希望一切都被清空,让我得到一个空白的数据库。
在Redis客户端中是否有这样的方法?
(error) LOADING Redis is loading the dataset in memory
。您能说明原因吗? - Ram Patra(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
- Christian请注意,FLUSHALL
可能过于激进。应使用 FLUSHDB
来清空一个数据库。FLUSHALL
将清除整个服务器上的所有数据库。鉴于这个问题是关于清空数据库的,我认为这个区别重要到足以单独回答。
你可以在终端中使用flushall
redis-cli> flushall
your_redis_client.flushdb
这种方法对我很有效 - 删除您的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 ASYNC
,否则请使用FLUSHALL
。请注意,在执行FLUSHALL ASYNC
之前的所有内容都将被清除,而在执行期间进行的更改将不受影响。FLUSHALL
del *
不起作用。它会返回一个0。 - Chloedel *
用于删除名为“*”的键。(只有一些命令接受通配符模式,因为检查数据库中具有许多键的模式对所有键非常慢。) - Viktor Söderqvist