Program Tip

Redis에서 모든 것을 삭제하려면 어떻게해야합니까?

programtip 2020. 9. 30. 11:20
반응형

Redis에서 모든 것을 삭제하려면 어떻게해야합니까?


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

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


redis-cli 사용 :

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

예를 들어, 쉘에서 :

redis-cli flushall

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


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

그러나 Redis 인스턴스에서 모든 Lua 스크립트도 삭제 하려면 다음을 따라야합니다.

스크립트 플러시

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

}

내 쪽에서 한 가지 더 옵션 :

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

이를 위해이 모든 작업을 수행하는 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 분 이상을 소비하지 않습니다.


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

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

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

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


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


(Redis 4.0.0 이상)을 사용하는 경우 FLUSHALL ASYNC를 사용하십시오. else FLUSHALL

https://redis.io/commands/flushall


  1. Redis 인스턴스를 중지합니다.
  2. RDB 파일을 삭제합니다.
  3. Redis 인스턴스를 시작합니다.

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


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

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


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

Use redis-cli -p 8000 to connect to the server as a client in a different terminal.

You can use either

  1. FLUSHDB - Delete all the keys of the currently selected DB. This command never fails. The time-complexity for this operation is O(N), N being the number of keys in the database.
  2. FLUSHALL - Delete all the keys of all the existing databases, not just the currently selected one. This command never fails. The time-complexity for this operation is O(N), N being the number of keys in all existing databases.

Check the documentation for ASYNC option for both.

If you are using Redis through its python interface, use these two functions for the same functionality:

def flushall(self):
    "Delete all keys in all databases on the current host"
    return self.execute_command('FLUSHALL')

and

def flushdb(self):
    "Delete all keys in the current database"
    return self.execute_command('FLUSHDB')

Open redis-cli and type:

FLUSHALL

You can use FLUSHDB

e.g

List databases:

127.0.0.1:6379> info keyspace
# Keyspace

List keys

127.0.0.1:6379> keys *
(empty list or set)

Add one value to a key

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

Create other key with two values

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

List all values in key2

127.0.0.1:6379> lrange key2 0 -1
1) "2"
2) "1"

Do FLUSHDB

127.0.0.1:6379> flushdb
OK

List keys and databases

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> info keyspace
# Keyspace

Your questions seems to be about deleting entire keys in a database. In this case you should try:

  1. Connect to redis. You can use the command redis-cli (if running on port 6379), else you will have to specify the port number also.
  2. Select your database (command select {Index})
  3. Execute the command flushdb

If you want to flush keys in all databases, then you should try flushall.


Its better if you can have RDM (Redis Desktop Manager). You can connect to your redis server by creating a new connection in RDM.

Once its connected you can check the live data, also you can play around with any redis command.

Opening a cli in RDM.

1) Right click on the connection you will see a console option, just click on it a new console window will open at the bottom of RDM.

Coming back to your question FLUSHALL is the command, you can simply type FLUSHALL in the redis cli.

Moreover if you want to know about any redis command and its proper usage, go to link below. https://redis.io/commands.


There are different approaches. If you want to do this from remote, issue flushall to that instance, through command line tool redis-cli or whatever tools i.e. telnet, a programming language SDK. Or just log in that server, kill the process, delete its dump.rdb file and appendonly.aof(backup them before deletion).


One click in FastoRedis/FastoNoSQL

enter image description here


If you are using Java then from the documentation, you can use any one of them based on your use case.

/**
 * 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();

Code:

RedisAdvancedClusterCommands syncCommands = // get sync() or async() commands 
syncCommands.flushdb();

Read more: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster

참고URL : https://stackoverflow.com/questions/6851909/how-do-i-delete-everything-in-redis

반응형