Redis'teki her şeyi nasıl silebilirim?


712

Tüm anahtarları silmek istiyorum. Her şeyin silinmesini ve boş bir veritabanı vermesini istiyorum.

Redis istemcisinde bunu yapmanın bir yolu var mı ?


3
Acaba neden del *çalışmıyor? 0 döndürür.
Chloe

1
yeniden başlatma redis sunucusu içindeki tüm verileri temizler, rit ?? @Timex
AATHITH RAJENDRAN

Yanıtlar:


1179

Redis-cli ile:

  • FLUSHDB - Bağlantının geçerli veritabanındaki tüm anahtarları siler.
  • FLUSHALL - Tüm veritabanlarındaki tüm anahtarları siler.

Örneğin, kabuğunuzda:

redis-cli flushall

1
Yukarıdaki denediğimde aşağıdaki hatayı alıyorum (error) LOADING Redis is loading the dataset in memory. Nedenini belirtebilir misiniz?
Ram Patra

4
@Ramswaroop - Redis'i yeniden başlattınız ve şu anda kalıcı depolama alanından veri yüklüyor. Bu işlem (yükleme) etkinken, DB'yi değiştiremezsiniz. Bitmesini bekleyin veya kalıcılığı olmadan Redis'i yapılandırın ve yeniden başlatın (boş olarak başlayacaktır, böylece FLUSHALL'ı bir kez yaptıktan sonra yapmanız gerekmez).
Itamar Haber

@ItamarHaber Yardım için teşekkürler, ben de aynı şeyi anladım.
Ram Patra

1
@ Neo, C # 'da redis istemci kütüphaneniz yoksa, bu komutu aşağıdaki gibi çalıştırabilirsiniz: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian

2
-hBir yeniden sunucu konumu belirtmek için bayrağı kullanın
Adam F

194

Dikkatli FLUSHALLolun aşırıya kaçabilir. FLUSHDByalnızca bir veritabanını temizleyendir. FLUSHALLtüm sunucuyu silecektir. Sunucudaki her veritabanında olduğu gibi. Soru bir veritabanının yıkanmasıyla ilgili olduğundan, bunun ayrı bir cevabı hak edecek kadar önemli bir ayrım olduğunu düşünüyorum.


4
Benden +1, bunun aslında daha iyi bir cevap olduğunu düşündüm. Verilen OP'nin sorusu "her şeyi sil" der, ancak bunu "bana boş bir veritabanı verin" izler - aslında ne anlama geldiğine bakılmaksızın, yaptığınız ayrımın en azından söylemek faydalı olduğunu düşünüyorum.
Doug

28

Şimdiye kadar verilen cevaplar kesinlikle doğrudur; tüm anahtarları silerler.

Ancak, tüm Lua komut dosyalarını Redis örneğinden de silmek istiyorsanız , bunu şu şekilde izlemelisiniz:

SENARYO YIKAMA

OP iki soru sorar; bu ikinci soruyu tamamlar ( her şey silinir).


4
Hayır, bir soru sordu ve o zamandan bu yana iki yıl içinde Redis'teki kapsam arttı. OP'nin sorusu özellikle anahtarların silinmesi ile ilgiliydi. Bundan daha farklı bir soruya cevap veriyorsunuz.
Gerçek Fatura

15
@TheRealBill Mevcut ve gelecekteki SO okuyucular için neyin yararlı olduğunu düşünmelisiniz. Buradaki cevaplar artık OP'nin I want everything wiped out and give me a blank database.sorusunu ele almadı . Yani, imho, eklemem iyi bir şey, ki bu birkaç insana yardım etti. Tabii katılmamaya çekinmeyin, SO da bununla ilgili.
Tw Bert

2
Bağlam her şeydir ve ilk cümle bunu oluşturur: "Tüm anahtarları silmek istiyorum". Sorunun farklı bir cevap vermek için yeniden yazılması, bana SO hakkında olduğu gibi değil. Bu, verilen soruyu sormakla ilgilidir - dolayısıyla incelenmekte olan cevabı belirten denetim bayrağı farklı bir soruyu cevaplamaktır. Ancak görüşler farklıdır.
Gerçek Fatura

Sunucuyu kendiniz çalıştırıyorsanız, her şeyi
silmenin

18

FLUSHALL Tüm veritabanlarındaki tüm anahtarları kaldır

FLUSHDB Geçerli veritabanındaki tüm anahtarları kaldır

SCRIPT FLUSH Komut dosyası önbelleğinden tüm komut dosyalarını kaldırın.


15

Eğer redis-rb gem kullanıyorsanız o zaman arayabilirsiniz:

your_redis_client.flushdb

11

Bu yöntem benim için çalıştı - Jedis kümenizdeki mevcut bağlı Veritabanının her şeyi silin.

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

Benim tarafımdan bir seçenek daha:

Üretim ve üretim öncesi veritabanlarımızda binlerce anahtar vardır. Zaman zaman bazı anahtarları silmemiz (bazı maskeler ile), bazı kriterler vb. İle değiştirmemiz gerekir. Elbette, CLI'den manuel olarak yapmanın hiçbir yolu yoktur, özellikle de parçalama (her fizikselde 512 mantıksal dbs).

Bu amaçla tüm bu işleri yapan java istemci aracı yazıyorum. Anahtarların silinmesi durumunda yardımcı program çok basit olabilir, sadece bir sınıf var:

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

}

Bu tür araçları yazmak çok kolay buluyorum ve 5-10 dakikadan fazla harcamıyorum.


5

FLUSHALL Var olan tüm veritabanlarının tüm Anahtarlarını siler. Sürüm yeniden sürüm> 4.0, sunucuyu engellemeden arka plan iş parçacığında çalışan FLUSHALL ASYNC desteklenir https://redis.io/commands/flushall

FLUSHDB - Seçili Veritabanındaki tüm anahtarları siler. https://redis.io/commands/flushdb

İşlemleri gerçekleştirmek için zaman karmaşıklığı O (N) olacaktır; burada N, veritabanındaki anahtar sayısıdır.

Redis'ten gelen Yanıt basit bir dize olacaktır "OK"


4

Her veritabanınızdan tüm anahtarları silen FLUSHALL'u kullanabilirsiniz. FLUSHDB olarak mevcut veritabanımızdaki tüm anahtarları silecektir.


4
  1. Redis örneğini durdur.
  2. RDB dosyasını silin.
  3. Redis örneğini başlatın.

Benim tecrübeme göre, kalıcılığınız varsa, gerçekten her şeyi kaldırmak için bu yordamı izlemeniz gerekir.
ywarnier

4

FLUSHALL ASYNCBaşka (Redis 4.0.0 veya üstü) kullanıyorsanız kullanın FLUSHALL.

https://redis.io/commands/flushall

Not : Yürütmeden önce her şey FLUSHALL ASYNCtahliye edilecektir. Yürütme sırasında yapılan değişiklikler FLUSHALL ASYNCbundan etkilenmeyecektir.


3

Redis-cli'yi açın ve şunu yazın:

FLUSHALL

1
Gönderiniz soruyu cevaplasa da, bazı belgeler eksiktir. Lütfen cevabınızı düzenleyin ve sağlayın.
hellow

2

bazen redis sunucusunu durdurun ve rdb , aof dosyalarını silin no hiçbir veri yeniden yükleme olabilir emin olun. sonra redis sunucusunu başlatın, şimdi yeni ve boş.


2

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

Bağlı istemciden tüm verileri kaldıracak (ana bilgisayar ve bağlantı noktası ile)


2

Redis sunucusunu başlattıktan sonra: service redis-server start --port 8000veya redis-server.

redis-cli -p 8000Sunucuya farklı bir terminalde istemci olarak bağlanmak için kullanın .

Şunlardan birini kullanabilirsiniz:

  1. FLUSHDB - Seçili DB'nin tüm anahtarlarını sil. Bu komut asla başarısız olmaz. Bu işlem için zaman karmaşıklığı O (N) 'dir, N veritabanındaki anahtar sayısıdır.
  2. FLUSHALL - Yalnızca şu anda seçili olan tüm veritabanlarının tüm anahtarlarını siler. Bu komut asla başarısız olmaz. Bu işlemin zaman karmaşıklığı O (N) 'dir, N mevcut tüm veritabanlarındaki anahtar sayısıdır.

ASYNC belgelerine bakınHer ikisi seçeneğinin .

Redis'i python arayüzü üzerinden kullanıyorsanız, aynı işlevsellik için şu iki işlevi kullanın:

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

ve

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

1

Sorularınız bir veritabanındaki tüm anahtarları silmekle ilgili gibi görünüyor. Bu durumda şunları denemelisiniz:

  1. Redis'e bağlanın. Komutu kullanabilirsiniz redis-cli(6379 numaralı bağlantı noktasında çalışıyorsa), ayrıca bağlantı noktası numarasını da belirtmeniz gerekir.
  2. Veritabanınızı seçin (komut select {Index})
  3. Komutu yürütün flushdb

Tüm veritabanlarındaki anahtarları yıkamak istiyorsanız, denemelisiniz flushall.



1

Kullanabilirsiniz FLUSHDB

Örneğin

Veritabanlarını listele:

127.0.0.1:6379> info keyspace
# Keyspace

Liste tuşları

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

Bir anahtara bir değer ekleme

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

İki değerle başka anahtar oluşturma

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 içindeki tüm değerleri listele

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

Do FLUSHDB

127.0.0.1:6379> flushdb
OK

Anahtarları ve veritabanlarını listeleme

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

keys * command pahalı bir komuttur. bu komutu bir üretim redis sunucusunda çalıştırma
emert117

1

python'da aşağıdaki yaklaşımı kullanabilirsiniz

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

RDM (Redis Desktop Manager) varsa daha iyi. RDM'de yeni bir bağlantı oluşturarak redis sunucunuza bağlanabilirsiniz.

Bağlandıktan sonra canlı verileri kontrol edebilirsiniz, ayrıca herhangi bir redis komutuyla da oynayabilirsiniz.

RDM'de bir klibi açma.

1) Bir konsol seçeneği göreceğiniz bağlantıya sağ tıklayın, sadece RDM'nin altında yeni bir konsol penceresi açılacaktır.

Sorunuza geri dönersek, FLUSHALL komuttur, redis cli'suna FLUSHALL yazmanız yeterlidir.

Ayrıca, herhangi bir redis komutu ve doğru kullanımı hakkında bilgi edinmek isterseniz, aşağıdaki bağlantıya gidin. https://redis.io/commands .


0

Farklı yaklaşımlar var. Bunu uzaktan yapmak istiyorsanız, komut satırı aracı redis-cli veya herhangi bir araç yani telnet, bir programlama dili SDK'sı aracılığıyla bu örneğe flushall verin. Ya da sadece o sunucuda oturum açın, işlemi öldürün, dump.rdb dosyasını silin ve appendonly.aof (silmeden önce yedekleyin).


0

Java kullanıyorsanız, o zaman belgelerden, kullanım durumunuza göre bunlardan herhangi birini kullanabilirsiniz.

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

Daha fazla bilgi için: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.