Redis의 모든 항목을 어떻게 삭제합니까?


710

모든 키를 삭제하고 싶습니다. 모든 것이 지워지고 빈 데이터베이스가 필요합니다.

Redis 클라이언트 에서이를 수행하는 방법이 있습니까?


3
del *작동하지 않는지 궁금 합니다.
Chloe

1
redis 서버를 다시 시작하면 모든 데이터가 정리됩니다. @Timex
AATHITH RAJENDRAN

답변:


1177

redis-cli로 :

  • FLUSHDB – 연결의 현재 데이터베이스에서 모든 키를 삭제합니다.
  • FLUSHALL – 모든 데이터베이스에서 모든 키를 삭제합니다.

예를 들어, 쉘에서 :

redis-cli flushall

1
위의 시도하면 다음 오류가 발생 (error) LOADING Redis is loading the dataset in memory합니다. 이유를 지정할 수 있습니까?
Ram Patra

4
@Ramswaroop-Redis를 다시 시작했으며 현재 영구 저장소에서 데이터를로드하고 있습니다. 이 프로세스 (로드 중)가 활성화되어있는 동안에는 DB를 조작 할 수 없습니다. 완료 될 때까지 기다리거나 지속성없이 Redis를 구성한 후 다시 시작하십시오 (빈 상태가되면 FLUSHALL을 수행 할 필요가 없습니다).
Itamar Haber

@ItamarHaber 도움을 주셔서 감사합니다, 나도 같은 것을 알아 냈습니다.
Ram Patra

1
@Neo C #에 redis 클라이언트 라이브러리가없는 경우 다음과 같이 간단히 해당 명령을 실행할 수 있습니다. (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian

2
-h플래그를 사용하여 redis 서버 위치를 지정 하십시오
Adam F

194

그 위로 헤드가 FLUSHALL과잉 될 수있다. FLUSHDB데이터베이스 만 플러시하는 것입니다. FLUSHALL전체 서버를 지 웁니다. 서버의 모든 데이터베이스에서와 같이. 질문은 데이터베이스 플러시에 관한 것이기 때문에 이것이 별도의 답변을받을만큼 중요한 구별이라고 생각합니다.


4
+1, 나는 이것이 더 나은 대답이라고 생각했습니다. 당연히 OP의 질문에 "모든 것을 닦아 내십시오"라고 표시되지만 그 뒤에는 "빈 데이터베이스를 제공하십시오"라는 말이 있습니다.
doug

28

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

그러나 Redis 인스턴스에서 모든 Lua 스크립트 를 삭제 하려면 다음을 수행해야합니다.

스크립트 FLUSH

OP는 두 가지 질문을합니다. 이것으로 두 번째 질문이 끝났습니다 ( 모두 지워졌습니다).


4
그는 한 가지 질문을했으며 그 이후 2 년 만에 Redis의 범위가 증가했습니다. OP의 질문은 특히 키 삭제에 관한 것입니다. 이 질문과 다른 질문에 대답하고 있습니다.
진짜 법안

15
@TheRealBill 현재와 미래의 SO 독자에게 유용한 것이 무엇인지 생각해야합니다. 여기에 대한 답변은 더 이상 OP의 I want everything wiped out and give me a blank database.질문을 다루지 않았습니다 . 그래서, imho, 나의 추가는 좋은 것입니다, 그것은 소수의 사람들을 도왔습니다. 물론 동의하지 않으셔도됩니다. 그 또한 SO에 관한 것입니다.
Tw Bert

2
문맥은 모든 것입니다. 첫 문장은 "모든 키를 삭제하고 싶습니다"라고 설정합니다. 다른 대답을하기 위해 질문을 다시 쓰는 것은 내가 말하는 것이 아닙니다. 주어진 질문을하는 것입니다. 따라서 검토중인 답변을 나타내는 중재 플래그가 다른 질문에 답변하고 있습니다. 그러나 의견은 다릅니다.
실제 법안

서버를 직접 실행하는 경우 모든 것을 지우는 가장 빠른 방법은 서버를 종료하고 다시 시작하는 것입니다 (실수로 발견)
acutesoftware

18

FLUSHALL 모든 데이터베이스에서 모든 키를 제거

FLUSHDB 현재 데이터베이스에서 모든 키를 제거합니다

SCRIPT FLUSH 스크립트 캐시에서 모든 스크립트를 제거하십시오.


15

redis-rb gem을 사용하는 경우 간단히 다음을 호출 할 수 있습니다.

your_redis_client.flushdb

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

}

7

내 편에서 한 가지 더 옵션 :

프로덕션 및 프로덕션 전 데이터베이스에는 수천 개의 키가 있습니다. 때때로 우리는 일부 키 (일부 마스크로)를 삭제하고 일부 기준으로 수정해야합니다. 물론, 특히 샤딩 (각 물리적마다 512 개의 논리적 DB)을 갖는 CLI에서 수동으로 수행 할 수있는 방법이 없습니다.

이를 위해이 모든 작업을 수행하는 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 모든 기존 데이터베이스의 모든 키를 삭제합니다. 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 ASYNCelse (Redis 4.0.0 이상)를 사용하는 경우 사용 하십시오 FLUSHALL.

https://redis.io/commands/flushall

참고 : 실행하기 전에 모든 항목 FLUSHALL ASYNC이 제거됩니다. 실행 중에 작성된 변경 사항 FLUSHALL ASYNC은 영향을받지 않습니다.


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

3

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

FLUSHALL

1
게시물이 질문에 대답 할 수 있지만 문서가 부족합니다. 답변을 수정하여 알려주십시오.
hellow

2

나는 때때로 redis-server를 멈추고 rdb, 파일을 삭제한다. 그런 다음 redis-server를 시작하십시오. 이제 새롭고 비어 있습니다.


2

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

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


2

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

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

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

  1. FLUSHDB 현재 선택된 DB의 모든 키를 삭제합니다. 이 명령은 절대 실패하지 않습니다. 이 연산의 시간 복잡도는 O (N)이며 N은 데이터베이스의 키 수입니다.
  2. 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')

1

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

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

모든 데이터베이스에서 키를 플러시하려면을 시도해야합니다 flushall.



1

당신이 사용할 수있는 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

키 * 명령은 비싼 명령입니다. 프로덕션 Redis 서버에서이 명령을 실행하지 마십시오
emert117

1

파이썬에서 다음 접근법을 사용할 수 있습니다

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

0

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

연결되면 라이브 데이터를 확인할 수 있으며 redis 명령을 사용하여 놀 수도 있습니다.

RDM에서 cli를 엽니 다.

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

귀하의 질문으로 돌아 오는 FLUSHALL 명령입니다, 당신은 단순히 redis cli에 FLUSHALL을 입력 할 수 있습니다.

또한 redis 명령과 올바른 사용법에 대해 알고 싶다면 아래 링크로 이동하십시오. https://redis.io/commands .


0

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


0

당신이 사용하는 경우 자바 문서에서 다음, 당신은 당신의 사용 사례를 기반으로 그 중 하나를 사용할 수 있습니다.

/**
 * 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.