如何删除Redis中的所有内容?

时间:2011-07-27 22:15:01

标签: redis

我想删除所有密钥。我希望一切都消失,并给我一个空白的数据库。

有没有办法在Redis客户端中执行此操作?

25 个答案:

答案 0 :(得分:1110)

使用redis-cli:

  • FLUSHDB - 从连接的CURRENT数据库中删除数据。
  • FLUSHALL - 从所有数据库中删除数据。

Redis文档:

例如,在你的shell中:

redis-cli flushall

答案 1 :(得分:184)

抬头FLUSHALL可能有点矫枉过正。 FLUSHDB是仅刷新数据库的那个。 FLUSHALL将清除整个服务器。与服务器上的每个数据库一样。由于问题是关于刷新数据库,我认为这是一个非常重要的区别,值得单独回答。

答案 2 :(得分:27)

到目前为止,答案是绝对正确的;他们删除了所有密钥。

但是,如果您还想从Redis实例中删除所有Lua脚本,则应遵循以下步骤:

SCRIPT FLUSH

OP提出两个问题;这就完成了第二个问题( 所有 擦除)。

答案 3 :(得分:16)

FLUSHALL 从所有数据库中删除所有密钥

FLUSHDB 从当前数据库中删除所有键

SCRIPT FLUSH 从脚本缓存中删除所有脚本。

答案 4 :(得分:15)

如果您正在使用redis-rb gem,那么您只需致电:

your_redis_client.flushdb

答案 5 :(得分:10)

此方法对我有用 - 删除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());
        }
    }

}

答案 6 :(得分:7)

我身边的另一个选择:

在我们的生产和预生产数据库中,有数千个密钥。我们需要不时删除一些键(通过某些掩码),按某些标准修改等等。当然,没有办法从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分钟。

答案 7 :(得分:5)

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

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

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

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

答案 8 :(得分:4)

您可以使用FLUSHALL删除每个数据库中的所有密钥。 FLUSHDB将删除当前数据库中的所有密钥。

答案 9 :(得分:4)

如果使用(Redis 4.0.0或更高版本),请使用FLUSHALL ASYNC,否则使用FLUSHALL

https://redis.io/commands/flushall

答案 10 :(得分:3)

  1. 停止Redis实例。
  2. 删除RDB文件。
  3. 启动Redis实例。

答案 11 :(得分:2)

redis-cli -h <host> -p <port> flushall

它将从连接的客户端(使用主机和端口)删除所有数据

答案 12 :(得分:2)

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

答案 13 :(得分:1)

使用以下内容启动Redis服务器后:service redis-server start --port 8000redis-server

使用redis-cli -p 8000作为不同终端中的客户端连接到服务器。

您可以使用

  1. FLUSHDB - 删除当前所选数据库的所有键。此命令永远不会失败。此操作的时间复杂度为O(N),N是数据库中的键数。
  2. FLUSHALL - 删除所有现有数据库的所有键,而不仅仅是当前选定的数据库。此命令永远不会失败。此操作的时间复杂度为O(N),N是所有现有数据库中的键数。
  3. 检查两者的 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')
    

答案 14 :(得分:1)

打开redis-cli并输入:

FLUSHALL

答案 15 :(得分:1)

您可以在python中使用以下方法

def redis_clear_cache(self):

    try:
        redis_keys = self.redis_client.keys('*')
    except Exception as e:
        # print('redis_client.keys() raised exception => ' + str(e))
        return 1

    try:
        if len(redis_keys) != 0:
            self.redis_client.delete(*redis_keys)
    except Exception as e:
        # print('redis_client.delete() raised exception => ' + str(e))
        return 1

    # print("cleared cache")
    return 0

答案 16 :(得分:1)

这对我有用:redis-cli KEYS \* | xargs --max-procs=16 -L 100 redis-cli DEL

它列出了redis中的所有密钥,然后使用xargs传递给redis-cli DEL,每个命令最多使用100个密钥,但是由于安全原因,在没有FLUSHDB或FLUSHALL的情况下,一次运行16个命令非常快速且有用,例如,在Docker或Kubernetes中使用Bitnami的Redis。而且,它不需要任何其他编程语言,而只需一行。

答案 17 :(得分:1)

你可以在终端中使用flushall

redis-cli> flushall

答案 18 :(得分:0)

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

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

如果要刷新所有数据库中的键,则应尝试flushall

答案 19 :(得分:0)

最好具有RDM(Redis桌面管理器)。 您可以通过在RDM中创建新连接来连接到Redis服务器。

连接后,您可以检查实时数据,也可以使用任何redis命令进行播放。

在RDM中打开cli。

1)右键单击连接,您将看到一个控制台选项,只需单击它,一个新的控制台窗口将在RDM的底部打开。

回到您的问题,命令是FLUSHALL,您只需在redis cli中键入FLUSHALL。

此外,如果您想了解任何redis命令及其正确用法,请转到下面的链接。 https://redis.io/commands

答案 20 :(得分:0)

有不同的方法。如果要从远程执行此操作,请通过命令行工具redis-cli或任何工具(即telnet,一种编程语言SDK)向该实例发出flushall。或者只是登录该服务器,终止该进程,删除其dump.rdb文件和appendonly.aof(在删除之前备份它们)。

答案 21 :(得分:0)

答案 22 :(得分:0)

您可以使用FLUSHDB

例如

列出数据库:

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

列出key2中的所有值

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

答案 23 :(得分:0)

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

答案 24 :(得分:0)

如果你想在windows中清除redis: 在

中找到redis-cli <块引用>

C:\Program Files\Redis 并运行 FLUSHALL 命令。