모든 키를 삭제하고 싶습니다. 모든 것이 지워지고 빈 데이터베이스가 필요합니다.
Redis 클라이언트 에서이를 수행하는 방법이 있습니까?
모든 키를 삭제하고 싶습니다. 모든 것이 지워지고 빈 데이터베이스가 필요합니다.
Redis 클라이언트 에서이를 수행하는 방법이 있습니까?
답변:
redis-cli로 :
예를 들어, 쉘에서 :
redis-cli flushall
(error) LOADING Redis is loading the dataset in memory
합니다. 이유를 지정할 수 있습니까?
(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
플래그를 사용하여 redis 서버 위치를 지정 하십시오
지금까지의 답변은 절대적으로 정확합니다. 그들은 모든 키를 삭제합니다.
그러나 Redis 인스턴스에서 모든 Lua 스크립트 를 삭제 하려면 다음을 수행해야합니다.
OP는 두 가지 질문을합니다. 이것으로 두 번째 질문이 끝났습니다 ( 모두 지워졌습니다).
I want everything wiped out and give me a blank database.
질문을 다루지 않았습니다 . 그래서, imho, 나의 추가는 좋은 것입니다, 그것은 소수의 사람들을 도왔습니다. 물론 동의하지 않으셔도됩니다. 그 또한 SO에 관한 것입니다.
FLUSHALL 모든 데이터베이스에서 모든 키를 제거
FLUSHDB 현재 데이터베이스에서 모든 키를 제거합니다
SCRIPT FLUSH 스크립트 캐시에서 모든 스크립트를 제거하십시오.
이 방법은 저에게 효과적이었습니다-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 분을 소비하지 않습니다.
FLUSHALL 모든 기존 데이터베이스의 모든 키를 삭제합니다. Redis 버전> 4.0 이상인 경우 서버를 차단하는 백그라운드 스레드에서 실행되는 FLUSHALL ASYNC가 지원됩니다. https://redis.io/commands/flushall
FLUSHDB-선택한 데이터베이스의 모든 키를 삭제합니다. https://redis.io/commands/flushdb
연산을 수행하는 시간 복잡도는 O (N)이며 여기서 N은 데이터베이스의 키 수입니다.
redis의 응답은 간단한 문자열 "OK"입니다.
FLUSHALL ASYNC
else (Redis 4.0.0 이상)를 사용하는 경우 사용 하십시오 FLUSHALL
.
https://redis.io/commands/flushall
참고 : 실행하기 전에 모든 항목 FLUSHALL ASYNC
이 제거됩니다. 실행 중에 작성된 변경 사항 FLUSHALL ASYNC
은 영향을받지 않습니다.
나는 때때로 redis-server를 멈추고 rdb, 파일을 삭제한다. 그런 다음 redis-server를 시작하십시오. 이제 새롭고 비어 있습니다.
다음을 사용하여 Redis 서버를 시작한 후 : service redis-server start --port 8000
또는redis-server
.
사용하다 redis-cli -p 8000
다른 터미널에서 클라이언트로 서버에 연결하는 데 합니다.
둘 중 하나를 사용할 수 있습니다
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')
FastoRedis / FastoNoSQL 에서 한 번의 클릭
당신이 사용할 수있는 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
파이썬에서 다음 접근법을 사용할 수 있습니다
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
RDM (Redis Desktop Manager)을 사용할 수 있으면 더 좋습니다. RDM에서 새 연결을 작성하여 redis 서버에 연결할 수 있습니다.
연결되면 라이브 데이터를 확인할 수 있으며 redis 명령을 사용하여 놀 수도 있습니다.
RDM에서 cli를 엽니 다.
1) 연결을 마우스 오른쪽 버튼으로 클릭하면 콘솔 옵션이 표시됩니다. RDM 하단에 새 콘솔 창이 열립니다.
귀하의 질문으로 돌아 오는 FLUSHALL 명령입니다, 당신은 단순히 redis cli에 FLUSHALL을 입력 할 수 있습니다.
또한 redis 명령과 올바른 사용법에 대해 알고 싶다면 아래 링크로 이동하십시오. https://redis.io/commands .
다른 접근 방식이 있습니다. 원격에서이를 수행하려면 명령 행 도구 redis-cli 또는 telnet, 프로그래밍 언어 SDK 등의 도구를 통해 해당 인스턴스에 flushall을 발행하십시오. 또는 해당 서버에 로그인하여 프로세스를 종료하고 dump.rdb 파일과 appendonly.aof (삭제하기 전에 백업)를 삭제하십시오.
당신이 사용하는 경우 자바 문서에서 다음, 당신은 당신의 사용 사례를 기반으로 그 중 하나를 사용할 수 있습니다.
/**
* 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
del *
작동하지 않는지 궁금 합니다.