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

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

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



답변

redis-cli로 :

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

예를 들어, 쉘에서 :

redis-cli flushall


답변

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


답변

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

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

스크립트 FLUSH

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


답변

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

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

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


답변

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

your_redis_client.flushdb


답변

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

}


답변

내 편에서 한 가지 더 옵션 :

프로덕션 및 프로덕션 전 데이터베이스에는 수천 개의 키가 있습니다. 때때로 우리는 일부 키 (일부 마스크로)를 삭제하고 일부 기준으로 수정해야합니다. 물론, 특히 샤딩 (각 물리적마다 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 분을 소비하지 않습니다.