Chcę usunąć wszystkie klucze. Chcę, aby wszystko zostało wymazane i daj mi pustą bazę danych.
Czy jest na to sposób w kliencie Redis ?
Chcę usunąć wszystkie klucze. Chcę, aby wszystko zostało wymazane i daj mi pustą bazę danych.
Czy jest na to sposób w kliencie Redis ?
Odpowiedzi:
Z redis-cli:
Na przykład w twojej powłoce:
redis-cli flushall
(error) LOADING Redis is loading the dataset in memory
. Czy możesz podać dlaczego?
(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
flagi, aby określić lokalizację serwera redis
Heads up, który FLUSHALL
może być przesadą. FLUSHDB
to ten, który opróżnia tylko bazę danych. FLUSHALL
usunie cały serwer. Jak w każdej bazie danych na serwerze. Ponieważ pytanie dotyczyło opróżnienia bazy danych, myślę, że jest to wystarczająco ważne rozróżnienie, aby zasługiwać na osobną odpowiedź.
Jak dotąd odpowiedzi są absolutnie poprawne; usuwają wszystkie klucze.
Jeśli jednak chcesz usunąć wszystkie skrypty Lua z instancji Redis, wykonaj następujące czynności:
PO zadaje dwa pytania; to uzupełnia drugie pytanie ( wszystko wyczyszczone).
I want everything wiped out and give me a blank database.
pytania PO . Imho, mój dodatek jest dobry, co pomogło kilku osobom. Nie krępuj się, oczywiście, właśnie o to chodzi w SO.
FLUSHALL Usuń wszystkie klucze ze wszystkich baz danych
FLUSHDB Usuń wszystkie klucze z bieżącej bazy danych
SCRIPT FLUSH Usuń wszystkie skrypty z pamięci podręcznej skryptów.
Ta metoda działała dla mnie - usuń wszystko z aktualnie podłączonej bazy danych w klastrze 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());
}
}
}
Jeszcze jedna opcja z mojej strony:
W naszych bazach danych dotyczących produkcji i przedprodukcji znajdują się tysiące kluczy. Od czasu do czasu musimy usunąć niektóre klucze (przez jakąś maskę), zmodyfikować według niektórych kryteriów itp. Oczywiście nie ma sposobu, aby to zrobić ręcznie z poziomu interfejsu CLI, zwłaszcza mając sharding (512 logicznych dbs w każdym fizycznym).
W tym celu piszę narzędzie klienta Java, które wykonuje całą tę pracę. W przypadku usuwania kluczy narzędzie może być bardzo proste, istnieje tylko jedna klasa:
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();
}
}
Pisanie tego rodzaju narzędzi uważam za bardzo łatwe i nie spędzam więcej niż 5-10 minut.
FLUSHALL Usuwa wszystkie klucze wszystkich istniejących baz danych. Dla wersji Redis> 4.0 obsługiwana jest funkcja FLUSHALL ASYNC, która działa w tle bez blokowania serwera https://redis.io/commands/flushall
FLUSHDB - usuwa wszystkie klucze z wybranej bazy danych. https://redis.io/commands/flushdb
Złożoność czasowa wykonywania operacji będzie wynosić O (N), gdzie N oznacza liczbę kluczy w bazie danych.
Odpowiedź z redis będzie prostym ciągiem „OK”
Możesz użyć FLUSHALL, który usunie wszystkie klucze z każdej bazy danych. Gdzie jako FLUSHDB usunie wszystkie klucze z naszej bieżącej bazy danych.
Użyj, FLUSHALL ASYNC
jeśli używasz (Redis 4.0.0 lub nowszy) FLUSHALL
.
https://redis.io/commands/flushall
Uwaga : wszystko przed wykonaniem FLUSHALL ASYNC
zostanie eksmitowane. Zmiany wprowadzone podczas wykonywania FLUSHALL ASYNC
pozostaną niezmienione.
Otwórz redis-cli i wpisz:
FLUSHALL
myślę, że czasami zatrzymuję serwer redis i usuwam rdb, aof plików。 upewnij się, że nie można załadować danych. następnie uruchom serwer redis, teraz jest nowy i pusty.
Po uruchomieniu serwera Redis za pomocą: service redis-server start --port 8000
lub redis-server
.
Służy redis-cli -p 8000
do łączenia się z serwerem jako klient w innym terminalu.
Możesz użyć albo
Sprawdź dokumentację opcji ASYNC dla obu.
Jeśli używasz Redis poprzez interfejs Pythona, użyj tych dwóch funkcji dla tej samej funkcjonalności:
def flushall(self):
"Delete all keys in all databases on the current host"
return self.execute_command('FLUSHALL')
i
def flushdb(self):
"Delete all keys in the current database"
return self.execute_command('FLUSHDB')
Twoje pytania dotyczą usuwania całych kluczy z bazy danych. W takim przypadku powinieneś spróbować:
redis-cli
(jeśli działa na porcie 6379), w przeciwnym razie będziesz musiał także podać numer portu.select {Index}
)flushdb
Jeśli chcesz opróżnić klucze we wszystkich bazach danych, powinieneś spróbować flushall
.
Jedno kliknięcie w FastoRedis / FastoNoSQL
Możesz użyć FLUSHDB
na przykład
Lista baz danych:
127.0.0.1:6379> info keyspace
# Keyspace
Lista kluczy
127.0.0.1:6379> keys *
(empty list or set)
Dodaj jedną wartość do klucza
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
Utwórz inny klucz z dwiema wartościami
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
Wyświetl wszystkie wartości w key2
127.0.0.1:6379> lrange key2 0 -1
1) "2"
2) "1"
Wykonaj FLUSHDB
127.0.0.1:6379> flushdb
OK
Lista kluczy i baz danych
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> info keyspace
# Keyspace
w Pythonie możesz zastosować następujące podejście
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
Lepiej, jeśli możesz mieć RDM (Redis Desktop Manager). Możesz połączyć się z serwerem Redis, tworząc nowe połączenie w RDM.
Po podłączeniu możesz sprawdzić dane na żywo, a także możesz bawić się dowolnym poleceniem redis.
Otwieranie cli w RDM.
1) Kliknij połączenie prawym przyciskiem myszy, zobaczysz opcję konsoli, po prostu kliknij na nią, otworzy się nowe okno konsoli na dole RDM.
Wracając do twojego pytania FLUSHALL jest poleceniem, możesz po prostu wpisać FLUSHALL w redis cli.
Ponadto, jeśli chcesz wiedzieć o dowolnym poleceniu redis i jego prawidłowym użyciu, przejdź do linku poniżej. https://redis.io/commands .
Istnieją różne podejścia. Jeśli chcesz to zrobić zdalnie, wydaj flushall do tej instancji, za pomocą narzędzia wiersza polecenia redis-cli lub dowolnego innego narzędzia, np. Telnet, SDK języka programowania. Lub po prostu zaloguj się na tym serwerze, zabij proces, usuń plik dump.rdb i appendonly.aof (wykonaj kopię zapasową przed usunięciem).
Jeśli korzystasz z Javy, to z dokumentacji możesz korzystać z dowolnej z nich w zależności od przypadku użycia.
/**
* 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();
Kod:
RedisAdvancedClusterCommands syncCommands = // get sync() or async() commands
syncCommands.flushdb();
Czytaj więcej: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster
del *
nie działa. Zwraca 0.