我想删除所有密钥。我要把一切都删掉,给我一个空白的数据库。

有没有办法在Redis客户端中做到这一点?


当前回答

警惕FLUSHOLL可能过度使用。FLUSHDB仅用于刷新数据库。FLUSHOLL将清除整个服务器。就像服务器上的每个数据库一样。由于问题是关于刷新数据库,我认为这是一个足够重要的区别,值得单独回答。

其他回答

冲洗室,冲洗室从所有数据库中删除所有密钥

冲水阀从当前数据库中删除所有密钥

脚本刷新从脚本缓存中删除所有脚本。

您可以使用FLUSHDB

e.g

列出数据库:

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

列出键2中的所有值

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

我认为有时会停止redis服务器并删除rdb、aof文件确保没有可以重新加载的数据。然后启动redis服务器,现在它是空的。

我还有一个选择:

在我们的生产和预生产数据库中,有数千个密钥。有时我们需要删除一些键(通过一些掩码),根据一些条件进行修改。

为此,我编写了完成所有这些工作的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分钟。

如果您使用的是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