首页 文章

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

提问于
浏览
629

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

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

19 回答

  • 6

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

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

    SCRIPT FLUSH

    OP提出两个问题;这完成了第二个问题( everything 擦除) .

  • 1

    打开redis-cli并输入:

    FLUSHALL
    
  • 1057

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

  • 9

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

  • 0

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

    • 连接到redis . 您可以使用命令 redis-cli (如果在端口6379上运行),否则您还必须指定端口号 .

    • 选择您的数据库(命令 select {Index}

    • 执行命令 flushdb

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

  • 0

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

  • 15

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

    如果你有RDM(Redis桌面管理器),它会更好 . 您可以通过在RDM中创建新连接来连接到redis服务器 .

    连接后,您可以检查实时数据,也可以使用任何redis命令 .

    在RDM中打开cli .

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

    回到你的问题FLUSHALL是命令,你只需在redis cli中键入FLUSHALL即可 .

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

  • 11

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

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

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

  • 3

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

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

  • 5

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

    https://redis.io/commands/flushall

  • 4

    我方还有一个选择:

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

  • 1

    使用以下命令启动Redis服务器后: service redis-server start --port 8000redis-server .

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

    你可以使用其中之一

    • FLUSHDB - 删除当前所选数据库的所有键 . 此命令永远不会失败 . 此操作的时间复杂度为O(N),N是数据库中的键数 .

    • FLUSHALL - 删除所有现有数据库的所有键,而不仅仅是当前选定的数据库 . 此命令永远不会失败 . 此操作的时间复杂度为O(N),N是所有现有数据库中的键数 .

    检查两者的文档 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')
    
  • 178
  • 26

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

    your_redis_client.flushdb
    
  • 2

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

  • 4

    使用redis-cli:

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

    • FLUSHALL - 从所有数据库中删除数据 .

    Redis文档:

    例如,在你的shell中:

    redis-cli flushall
    
  • 0
    • 停止Redis实例 .

    • 删除RDB文件 .

    • 启动Redis实例 .

  • 2

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

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

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

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

相关问题