Jak usunąć wszystko w Redis?


710

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 ?


3
Zastanawiam się, dlaczego del *nie działa. Zwraca 0.
Chloe

1
uruchom ponownie serwer Redis wyczyści wszystkie zawarte w nim dane, rit? @Timex
AATHITH RAJENDRAN

Odpowiedzi:


1177

Z redis-cli:

  • FLUSHDB - usuwa wszystkie klucze z bieżącej bazy danych połączenia.
  • FLUSHALL - Usuwa wszystkie klucze ze wszystkich baz danych.

Na przykład w twojej powłoce:

redis-cli flushall

1
Kiedy próbuję powyższego, pojawia się następujący błąd (error) LOADING Redis is loading the dataset in memory. Czy możesz podać dlaczego?
Ram Patra

4
@Ramswaroop - zrestartowałeś Redis i obecnie ładuje dane z trwałej pamięci. Gdy ten proces (ładowanie) jest aktywny, nie można manipulować bazą danych. Poczekaj, aż zakończy się, lub skonfiguruj trwałość Redis bez restartu i zrestartuj go (rozpocznie się pusty, więc nie będziesz musiał wykonywać FLUSHALL, gdy będzie gotowy).
Itamar Haber

@ItamarHaber Dzięki za pomoc, ja też doszedłem do tego samego.
Ram Patra

1
@Neo, jeśli nie masz biblioteki klienta Redis w C #, możesz po prostu uruchomić to polecenie, tak jak: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian

2
Użyj -hflagi, aby określić lokalizację serwera redis
Adam F

194

Heads up, który FLUSHALLmoże być przesadą. FLUSHDBto ten, który opróżnia tylko bazę danych. FLUSHALLusunie 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ź.


4
+1 ode mnie, pomyślałem, że tak naprawdę jest to lepsza odpowiedź. To prawda, że ​​pytanie PO mówi „wyczyść wszystko”, a następnie „daj mi pustą bazę danych” - niezależnie od tego, co miał na myśli, myślę, że dokonane przez ciebie rozróżnienie jest użyteczne, mówiąc delikatnie.
doug

28

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:

PŁUKANIE SKRYPU

PO zadaje dwa pytania; to uzupełnia drugie pytanie ( wszystko wyczyszczone).


4
Nie, zadał jedno pytanie iw ciągu dwóch lat od tamtego czasu zasięg Redisa wzrósł. Pytanie OP dotyczyło w szczególności usuwania kluczy. Odpowiadasz na inne pytanie niż to.
The Real Bill

15
@TheRealBill Musisz pomyśleć o tym, co jest przydatne dla obecnych i przyszłych czytelników SO. Odpowiedzi tutaj nie dotyczyły już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.
Tw Bert

2
Kontekst jest wszystkim, a pierwsze zdanie go ustanawia: „Chcę usunąć wszystkie klucze”. Przepisanie pytania w celu udzielenia innej odpowiedzi nie jest tym, o czym mówiono mi, że SO. Chodzi o zadanie zadanego pytania - stąd flaga moderacji wskazująca, że ​​analizowana odpowiedź odpowiada na inne pytanie. Ale opinie się różnią.
The Real Bill

Jeśli sam uruchamiasz serwer, najszybszym sposobem na wyczyszczenie wszystkiego jest zabicie serwera i zrestartowanie go (przypadkowo to się znalazło)
acutesoftware


15

Jeśli używasz klejnotu redis-rb, możesz po prostu zadzwonić:

your_redis_client.flushdb

11

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

}

7

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.


5

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”


4

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.


4

Użyj, FLUSHALL ASYNCjeśli używasz (Redis 4.0.0 lub nowszy) FLUSHALL.

https://redis.io/commands/flushall

Uwaga : wszystko przed wykonaniem FLUSHALL ASYNCzostanie eksmitowane. Zmiany wprowadzone podczas wykonywania FLUSHALL ASYNCpozostaną niezmienione.


3
  1. Zatrzymaj instancję Redis.
  2. Usuń plik RDB.
  3. Uruchom instancję Redis.

3

Otwórz redis-cli i wpisz:

FLUSHALL

1
Chociaż Twój post może odpowiedzieć na pytanie, brakuje w nim dokumentacji. Edytuj swoją odpowiedź i podaj ją.
cześć

2

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.


2

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

Usunie wszystkie dane z podłączonego klienta (z hostem i portem)


2

Po uruchomieniu serwera Redis za pomocą: service redis-server start --port 8000lub redis-server.

Służy redis-cli -p 8000do łączenia się z serwerem jako klient w innym terminalu.

Możesz użyć albo

  1. FLUSHDB - Usuń wszystkie klucze aktualnie wybranej bazy danych. To polecenie nigdy nie zawodzi. Złożoność czasowa tej operacji wynosi O (N), gdzie N jest liczbą kluczy w bazie danych.
  2. FLUSHALL - Usuń wszystkie klucze wszystkich istniejących baz danych, nie tylko aktualnie wybranych. To polecenie nigdy nie zawodzi. Złożoność czasowa tej operacji wynosi O (N), gdzie N jest liczbą kluczy we wszystkich istniejących bazach danych.

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')

1

Twoje pytania dotyczą usuwania całych kluczy z bazy danych. W takim przypadku powinieneś spróbować:

  1. Połącz z redis. Możesz użyć polecenia redis-cli(jeśli działa na porcie 6379), w przeciwnym razie będziesz musiał także podać numer portu.
  2. Wybierz bazę danych (polecenie select {Index})
  3. Wykonaj polecenie flushdb

Jeśli chcesz opróżnić klucze we wszystkich bazach danych, powinieneś spróbować flushall.



1

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

Polecenie keys * to kosztowne polecenie. nie uruchamiaj tego polecenia na produkcyjnym serwerze
Redis

1

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

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 .


0

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).


0

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.