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

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


当前回答

对于任何想知道如何在C#中做到这一点的人来说,这与为Python提供的相同问题的答案是一样的。

我正在使用StackExchange.Risv2.2.88进行dot-net(核心)5项目。我只需要清除集成测试的密钥,我没有在生产中这样做的目的。

我检查了intelligense中可用的内容,我看不到用现有API实现这一点的常用方法。我想这是故意的,是故意的。幸运的是,API确实公开了Execute方法。

我通过执行以下操作进行了测试:

打开了一个命令窗口。我正在使用docker,所以我是通过docker完成的。键入redis cli,启动cli键入KEYS*,它会显示我的所有密钥,以便我可以在执行以下代码之前和之后验证它们是否存在://不要滥用,小心使用var cache=连接多路复用器.Connect(新配置选项{端点={“localhost:6379”}});var db=_cache.GetDatabase();db.Execute(“flushdb”);再次键入KEYS*并查看其为空。

希望这对任何寻找它的人都有帮助。

其他回答

您的问题似乎是关于删除数据库中的所有密钥。在这种情况下,您应该尝试:

连接到redis。您可以使用命令redis-cli(如果在端口6379上运行),否则还必须指定端口号。选择数据库(命令Select{Index})执行命令flushdb

如果您想刷新所有数据库中的密钥,那么应该尝试刷新。

我还有一个选择:

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

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

你可以在航站楼使用flushhall

redis-cli> flushall

使用redis cli:

FLUSHDB–从连接的当前数据库中删除所有密钥。FLUSHOLL–从所有数据库中删除所有密钥。

例如,在shell中:

redis-cli flushall

FLUSHOLL删除所有现有数据库的所有密钥。FOr Redis版本>4.0,支持FLUSHOLL ASYNC,它在后台线程中运行,不会阻塞服务器https://redis.io/commands/flushall

FLUSHDB-删除所选数据库中的所有密钥。https://redis.io/commands/flushdb

执行操作的时间复杂度将为O(N),其中N是数据库中的键的数量。

redis的响应将是一个简单的字符串“OK”