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

TIM*_*MEX 676 redis

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

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

Jav*_*ier 1131

使用redis-cli:

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

Redis文档:

例如,在你的shell中:

redis-cli flushall
Run Code Online (Sandbox Code Playgroud)

  • @Ramswaroop - 您重新启动了Redis,它当前正在从持久存储中加载数据.当此过程(加载)处于活动状态时,您无法操纵数据库.要么等待它完成,要么配置Redis w/o持久性并重新启动它(它将开始为空,因此一旦启动就不需要执行FLUSHALL). (4认同)
  • 使用`-h`标志指定redis服务器位置 (2认同)

The*_*ill 188

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

  • 来自我的+1,我认为这实际上是更好的答案.当然,OP的问题是"擦掉所有东西",但随后是"给我一个空白的数据库" - 无论他的实际含义是什么,我认为你所做的区别至少可以说是有用的. (2认同)

Tw *_*ert 27

到目前为止答案绝对正确; 他们删除所有密钥.

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

脚本冲洗

OP提出两个问题; 这完成了第二个问题(一切都被抹去).

  • @TheRealBill你必须考虑什么对当前和未来的SO读者有用.这里的答案没有解决OP的问题`我希望一切都消失了,并给我一个空白的数据库.问题_anymore_.所以,imho,我的补充是一个很好的,这已经帮助了一些人.随意不同意当然,这也是SO的意义所在. (14认同)
  • 不,他问了一个问题,从那以后的两年里,Redis的范围增加了.OP的问题是专门删除密钥.你正在回答一个与此不同的问题. (4认同)
  • 上下文就是一切,第一句话确立了它:"我想删除所有键".重写问题以给出不同的答案并不是我所说的那样.它是关于询问给出的问题 - 因此,表明正在审查的答案的审核标志是回答不同的问题.但是,意见不同. (2认同)

小智 20

您可以在终端中使用flushall

redis-cli> flushall
Run Code Online (Sandbox Code Playgroud)


Jai*_*ach 17

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

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

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


Ger*_*Ger 15

如果您使用的是redis-rb gem,那么您只需调用:

your_redis_client.flushdb
Run Code Online (Sandbox Code Playgroud)


Kai*_*dul 11

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

}
Run Code Online (Sandbox Code Playgroud)


小智 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();
    }

}
Run Code Online (Sandbox Code Playgroud)

写这样的工具我觉得很容易,花费不超过5-10分钟.


小智 7

打开 redis-cli 并输入:

FLUSHALL
Run Code Online (Sandbox Code Playgroud)


小智 6

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


小智 5

您可以使用 FLUSHALL,它将从您的每个数据库中删除所有键。FLUSHDB 将从我们当前的数据库中删除所有键。


ath*_*uli 5

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

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

执行操作的时间复杂度将是O(N),其中N是数据库中的密钥数.

来自redis的响应将是一个简单的字符串"OK"


arn*_*tra 5

使用FLUSHALL ASYNCif using (Redis 4.0.0 or later) else FLUSHALL

https://redis.io/commands/flushall

注意:执行之前的所有内容都FLUSHALL ASYNC将被驱逐。执行期间所做的更改FLUSHALL ASYNC将不受影响。


gob*_*obi 5

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

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