630

모든 키를 삭제하고 싶습니다. 모든 것을 지우고 빈 데이터베이스를 제공하고 싶습니다.

이 작업을 수행 할 수있는 방법이 있습니까?레디 스고객?


  • 이유가 궁금합니다.del *작동하지 않습니다. 0을 반환합니다. - Chloe

19 답변


1059

redis-cli로 :

  • FLUSHDB - 연결의 CURRENT 데이터베이스에서 데이터를 제거합니다.
  • FLUSHALL - 모든 데이터베이스에서 데이터를 제거합니다.

Redis 문서 :

예를 들어, 쉘에서 :

redis-cli flushall


  • 셸에서 :redis-cli flushall - Cmag
  • 위의 시도 할 때 다음 오류가 발생합니다.(error) LOADING Redis is loading the dataset in memory. 이유를 지정할 수 있습니까? - Ram Patra
  • @Ramswaroop - Redis를 다시 시작했고 현재 영구 저장소에서 데이터를로드하고 있습니다. 이 프로세스 (로드 중)가 활성화되어있는 동안 DB를 조작 할 수 없습니다. 완료 될 때까지 기다리거나 지속성이없는 Redis를 구성한 다음 다시 시작하십시오 (비어있는 상태에서 시작되어 FLUSHALL이 작동되면 FLUSHALL을 수행하지 않아도됩니다). - Itamar Haber
  • @ 네오 당신이 C #에서 redis 클라이언트 라이브러리를 가지고 있지 않다면, 다음과 같이 간단하게 그 명령을 실행할 수 있습니다 :(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start(); - Christian
  • 사용-hredis 서버 위치를 지정하는 플래그 - Adam F

178

그 머리 위로FLUSHALL과잉 일 수 있습니다.FLUSHDB데이터베이스를 플러시하는 것입니다.FLUSHALL전체 서버를 제거합니다. 서버의 모든 데이터베이스에서와 같습니다. 질문은 데이터베이스를 비우는 것에 관한 것이므로 별도의 답변을 제시하는 것이 중요하다고 생각합니다.


  • +1, 나는 이것이 실제로 더 나은 대답이라고 생각했다. 부여 된 OP 질문는 & quot; 모든 것을 초기화 & quot;라고 말합니다. 하지만 그 뒤에는 "빈 데이터베이스를주세요"라고 표시되어 있습니다. 실제로 그가 의미하는 바에 관계없이 여러분이 만든 구분이 유용하다고 말합니다. - doug
  • 플러시가 지나치게 많을 수 있으므로 대답을 읽어야합니다. - Gokul

26

지금까지의 답변은 절대적으로 정확합니다. 그들은 모든 키를 삭제합니다.

그러나 모든 항목을 삭제하려는 경우소요스크립트를 Redis 인스턴스에서 가져 오려면 다음을 수행해야합니다.

스크립트 플래쉬

OP는 두 가지 질문을한다. 이것은 두 번째 질문을 완료합니다 (모두닦음).


  • 아니요, 그는 한 가지 질문을했고 그 후 2 년 동안 레디 스의 범위가 증가했습니다. OP의 질문은 특히 키 삭제에 관한 질문이었습니다. 이 질문과 다른 질문에 답변하셨습니다. - The Real Bill
  • @ The RealBill 현재와 미래의 SO 독자에게 유용한 것을 생각해야합니다. 여기에 대한 답변은 OP의 문제를 해결하지 못했습니다.I want everything wiped out and give me a blank database.의문더 이상. 그래서, imho, 나의 추가는 좋은 사람이다. 그것은 소수의 사람들을 도왔다. SOC가 무엇인지에 대해 동의하지 않으셔도됩니다. - Tw Bert
  • 문맥은 모든 것이고, 첫 번째 문장은 & quot; 모든 키를 삭제하고 싶습니다 & quot;라는 문구를 설정합니다. 다른 대답을주기 위해 질문을 다시 쓰는 것은 내가 말한 것에 대한 것이 아닙니다. 그것은 주어진 질문을 묻는 것입니다. 따라서 검토중인 대답을 나타내는 절도 플래그가 다른 질문에 대답하고 있습니다. 그러나 의견은 다릅니다. - The Real Bill
  • 당신의 의견은 주목됩니다. 그런가 말했다. - Tw Bert
  • 서버를 직접 실행하는 경우 모든 것을 지우는 가장 빠른 방법은 서버를 종료하고 다시 시작하는 것입니다 (실수로 발견됨) - acutesoftware

15

redis-rb 보석을 사용하는 경우 다음 전화를 걸면됩니다.

your_redis_client.flushdb


11

평면모든 데이터베이스에서 모든 키 제거

FLUSHDB현재 데이터베이스에서 모든 키 제거

스크립트 플래쉬스크립트 캐시에서 모든 스크립트를 제거하십시오.


9

이 방법은 저에게 효과적이었습니다 - 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

내 옆에서 한 가지 더 옵션 :

우리 프로덕션 및 프로덕션 데이터베이스에는 수천 개의 키가 있습니다. 일부 마스크를 사용하여 일부 키를 삭제하고 몇 가지 기준으로 수정해야 할 때가 있습니다. 물론 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 분을 소비하지 않습니다.


5

FLUSHALL 모든 기존 데이터베이스의 모든 키를 h 제합니다. Redis 버전> 4.0, FLUSHALL ASYNC가 지원되며 서버를 차단하는 백그라운드 스레드에서 실행됩니다https://redis.io/commands/flushall

FLUSHDB - 선택한 데이터베이스의 모든 키를 삭제합니다.https://redis.io/commands/flushdb

작업을 수행하는 데 드는 시간 복잡도는 O (N)입니다. 여기서 N은 데이터베이스의 키 수입니다.

redis의 응답은 "OK"라는 간단한 문자열입니다.


4

모든 데이터베이스에서 모든 키를 삭제하는 FLUSHALL을 사용할 수 있습니다. FLUSHDB는 현재 데이터베이스에서 모든 키를 삭제합니다.


4

사용하는 경우 FLUSHALL ASYNC 사용 (Redis 4.0.0 이상) FLUSHALL

https://redis.io/commands/flushall


3

  1. Redis 인스턴스를 중지하십시오.
  2. RDB 파일을 삭제하십시오.
  3. Redis 인스턴스를 시작하십시오.


2

나는 때때로 redis-server를 중지하고 rdb, aof 파일을 삭제한다고 생각한다. 다시로드 할 수있는 데이터가 없는지 확인하십시오. 그런 다음 redis-server를 시작합니다. 이제는 새 것이고 비어 있습니다.


2

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

연결된 클라이언트에서 모든 데이터를 제거합니다 (호스트 및 포트 사용)


1

다음을 사용하여 Redis-server를 시작한 후 :service redis-server start --port 8000또는redis-server.

용도redis-cli -p 8000다른 터미널에서 클라이언트로 서버에 연결합니다.

둘 중 하나를 사용할 수 있습니다.

  1. FLUSHDB- 현재 선택된 DB의 모든 키를 삭제합니다. 이 명령은 결코 실패하지 않습니다. 이 조작의 시간 복잡성은 O (N)이며, N은 데이터베이스의 키 수입니다.
  2. 평면- 현재 선택된 데이터베이스뿐만 아니라 모든 기존 데이터베이스의 모든 키를 삭제하십시오. 이 명령은 결코 실패하지 않습니다. 이 작업의 시간 복잡성은 O (N)이며 N은 기존 데이터베이스의 키 수입니다.

설명서를 확인하십시오.ASYNC둘 다에 대한 옵션.

파이썬 인터페이스를 통해 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')


1

redis-cli를 열고 다음을 입력하십시오.

FLUSHALL


  • 게시물을 통해 질문에 대한 답변을 얻을 수는 있지만 문서가 부족합니다. 답변을 수정하여 제공하십시오. - hellow

0

귀하의 질문에 대한 데이터베이스에서 전체 키를 삭제하는 것 같다. 이 경우 다음을 시도해야합니다.

  1. redis에 연결하십시오. 이 명령을 사용할 수 있습니다.redis-cli(포트 6379에서 실행중인 경우), 그렇지 않으면 포트 번호도 지정해야합니다.
  2. 데이터베이스를 선택하십시오 (명령select {Index})
  3. 명령을 실행하십시오.flushdb

모든 데이터베이스에서 키를 플러시하려면flushall.


0

RDM (Redis Desktop Manager)을 사용할 수 있다면 더 좋습니다. RDM에 새 연결을 작성하여 redis 서버에 연결할 수 있습니다.

연결이되면 라이브 데이터를 확인할 수 있으며 redis 명령으로 재생할 수 있습니다.

RDM에서 cli 열기.

1) 연결을 마우스 오른쪽 버튼으로 클릭하면 콘솔 옵션이 표시됩니다. 콘솔 옵션을 클릭하면 RDM 하단에 새 콘솔 창이 열립니다.

FLUSHALL이 명령입니다. 간단히 FLUSHALL을 입력하면됩니다.

또한 redis 명령과 그 적절한 사용법을 알고 싶다면 아래 링크를 방문하십시오.https://redis.io/commands.


0

다양한 접근법이 있습니다. 원격지에서이 작업을 수행하려면 명령 행 도구 redis-cli 또는 프로그래밍 언어 SDK 인 telnet 등의 도구를 사용하여 해당 인스턴스에 flushall을 실행하십시오. 또는 해당 서버에 로그인하여 프로세스를 종료하고 dump.rdb 파일 및 appendonly.aof를 삭제하십시오 (삭제하기 전에 백업하십시오).


0

클릭 한 번으로FastoRedis/FastoNoSQL

enter image description here

연결된 질문


관련된 질문

최근 질문