Bagaimana cara saya menghapus semua yang ada di Redis?

711

Saya ingin menghapus semua kunci. Saya ingin semuanya terhapus dan memberi saya database kosong.

Apakah ada cara untuk melakukan ini pada klien Redis ?

TIMEX
sumber
3
Saya heran mengapa del *tidak berhasil. Ia mengembalikan 0.
Chloe
1
restart server redis akan membersihkan semua data di dalamnya, rit ?? @Timex
AATHITH RAJENDRAN

Jawaban:

1178

Dengan redis-cli:

  • FLUSHDB - Menghapus semua kunci dari basis data koneksi saat ini.
  • FLUSHALL - Menghapus semua kunci dari semua basis data.

Misalnya, di shell Anda:

redis-cli flushall
Javier
sumber
1
Ketika saya mencoba di atas saya mendapatkan kesalahan berikut (error) LOADING Redis is loading the dataset in memory. Bisakah Anda menentukan alasannya?
Ram Patra
4
@Ramswaroop - Anda me-restart Redis dan saat ini memuat data dari penyimpanan persisten. Saat proses ini (memuat) aktif, Anda tidak dapat memanipulasi DB. Entah menunggu sampai selesai, atau konfigurasikan Redis tanpa ketekunan dan nyalakan kembali (itu akan mulai kosong sehingga Anda tidak perlu melakukan FLUSHALL begitu sudah habis).
Itamar Haber
@ ItamarHaber Terima kasih atas bantuannya, saya juga menemukan jawabannya.
Ram Patra
1
@ Tidak ada jika Anda tidak memiliki perpustakaan klien redis di C #, Anda dapat menjalankan perintah itu, seperti: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian
2
Gunakan -hbendera untuk menentukan lokasi server redis
Adam F
194

Kepala yang FLUSHALLmungkin berlebihan. FLUSHDBadalah orang yang menyiram basis data saja. FLUSHALLakan menghapus seluruh server. Seperti dalam setiap database di server. Karena pertanyaannya adalah tentang menyiram database, saya pikir ini adalah perbedaan yang cukup penting untuk mendapat jawaban yang terpisah.

Tagihan Asli
sumber
4
+1 dari saya, saya pikir ini adalah jawaban yang lebih baik sebenarnya. Memang, Pertanyaan OP mengatakan "hapus semuanya" tapi itu diikuti oleh "beri saya database kosong" - terlepas dari apa yang sebenarnya ia maksudkan, saya pikir perbedaan yang Anda buat berguna, untuk sedikitnya.
doug
28

Jawaban sejauh ini benar-benar benar; mereka menghapus semua kunci.

Namun, jika Anda juga ingin menghapus semua skrip Lua dari instance Redis, Anda harus mengikutinya dengan:

SCRIPT FLUSH

OP mengajukan dua pertanyaan; ini melengkapi pertanyaan kedua ( semuanya terhapus).

Tw Bert
sumber
4
Tidak, dia mengajukan satu pertanyaan dan dalam dua tahun sejak itu cakupan di Redis meningkat. Pertanyaan OP secara khusus tentang menghapus kunci. Anda menjawab pertanyaan yang berbeda dari yang ini.
The Real Bill
15
@TheRealBill Anda harus memikirkan apa yang bermanfaat bagi pembaca SO saat ini dan di masa depan. Jawaban di sini tidak menjawab I want everything wiped out and give me a blank database.pertanyaan OP lagi . Jadi, imho, tambahan saya bagus, yang telah membantu beberapa orang. Jangan ragu untuk tidak setuju dengan kursus, itu juga tentang SO.
Tw Bert
2
Konteks adalah segalanya, dan kalimat pertama menetapkannya: "Saya ingin menghapus semua kunci". Menulis ulang pertanyaan untuk memberikan jawaban yang berbeda bukanlah tentang apa yang saya katakan. Ini adalah tentang mengajukan pertanyaan yang diberikan - maka tanda moderasi yang menunjukkan jawaban yang sedang ditinjau adalah menjawab pertanyaan yang berbeda. Tapi, pendapat berbeda.
The Real Bill
Jika Anda menjalankan server sendiri, cara tercepat untuk menghapus semuanya adalah dengan mematikan server dan memulai kembali (menemukan ini secara tidak sengaja)
acutesoftware
18

FLUSHALL Hapus semua kunci dari semua basis data

FLUSHDB Hapus semua kunci dari database saat ini

SCRIPT FLUSH Hapus semua skrip dari cache skrip.

Jain Rach
sumber
15

Jika Anda menggunakan permata redis-rb maka Anda cukup menelepon:

your_redis_client.flushdb
Ger
sumber
11

Metode ini berfungsi untuk saya - hapus semua Database yang terhubung saat ini di kluster Jedis Anda.

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

}
Kaidul
sumber
7

Satu lagi opsi dari sisi saya:

Dalam basis data produksi dan pra-produksi kami ada ribuan kunci. Dari waktu ke waktu kita perlu menghapus beberapa kunci (dengan beberapa mask), memodifikasi dengan beberapa kriteria dll. Tentu saja, tidak ada cara untuk melakukannya secara manual dari CLI, terutama yang memiliki sharding (512 dbs logis dalam setiap fisik).

Untuk tujuan ini saya menulis alat klien java yang melakukan semua pekerjaan ini. Dalam kasus penghapusan kunci utilitas bisa sangat sederhana, hanya satu kelas di sana:

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

}

Menulis alat semacam itu sangat mudah dan menghabiskan tidak lebih dari 5-10 menit.

Denys
sumber
5

FLUSHALL Menghapus semua Kunci dari Semua database yang ada. Untuk versi Redis> 4.0, FLUSHALL ASYNC didukung yang berjalan di utas latar tanpa memblokir server https://redis.io/commands/flushall

FLUSHDB - Menghapus semua kunci dalam Database yang dipilih. https://redis.io/commands/flushdb

Kompleksitas waktu untuk melakukan operasi adalah O (N) di mana N menjadi jumlah kunci dalam database.

Respons dari redis adalah string sederhana "OK"

athavan kanapuli
sumber
4

Anda dapat menggunakan FLUSHALL yang akan menghapus semua kunci dari setiap basis data Anda. Sedangkan FLUSHDB akan menghapus semua kunci dari basis data kami saat ini.

justbegancoding
sumber
4
  1. Hentikan contoh Redis.
  2. Hapus file RDB.
  3. Mulai contoh Redis.
Denys
sumber
Dalam pengalaman saya, jika Anda memiliki ketekunan, Anda memang harus mengikuti prosedur ini + juga menghapus file .aof + masalah redis-cli flushall, untuk benar-benar menghapus semuanya.
ywarnier
4

Gunakan FLUSHALL ASYNCjika menggunakan (Redis 4.0.0 atau lebih tinggi) yang lain FLUSHALL.

https://redis.io/commands/flushall

Catatan : Segala sesuatu sebelum dieksekusi FLUSHALL ASYNCakan digusur. Perubahan yang dilakukan selama eksekusi FLUSHALL ASYNCakan tetap tidak terpengaruh.

arnabmitra
sumber
3

Buka redis-cli dan ketik:

FLUSHALL
Babaei behzad
sumber
1
Meskipun posting Anda mungkin menjawab pertanyaan, itu tidak memiliki beberapa dokumentasi. Harap edit jawaban Anda dan berikan itu.
hellow
2

Saya pikir kadang-kadang menghentikan redis-server dan menghapus rdb, file aof。 pastikan tidak ada data yang dapat dimuat ulang. kemudian jalankan redis-server, sekarang baru dan kosong.

tcrabsheen
sumber
2

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

Ini akan menghapus semua data dari klien yang terhubung (dengan host dan port)

gobi
sumber
2

Setelah Anda memulai server Redis menggunakan: service redis-server start --port 8000atau redis-server.

Gunakan redis-cli -p 8000untuk terhubung ke server sebagai klien di terminal yang berbeda.

Anda bisa menggunakan keduanya

  1. FLUSHDB - Hapus semua kunci dari DB yang saat ini dipilih. Perintah ini tidak pernah gagal. Kompleksitas waktu untuk operasi ini adalah O (N), N menjadi jumlah kunci dalam database.
  2. FLUSHALL - Hapus semua kunci dari semua database yang ada, bukan hanya yang saat ini dipilih. Perintah ini tidak pernah gagal. Kompleksitas waktu untuk operasi ini adalah O (N), N menjadi jumlah kunci di semua database yang ada.

Periksa opsi dokumentasi ASYNC untuk keduanya.

Jika Anda menggunakan Redis melalui antarmuka python, gunakan dua fungsi ini untuk fungsi yang sama:

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

dan

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

Pertanyaan Anda tampaknya tentang menghapus seluruh kunci dalam database. Dalam hal ini Anda harus mencoba:

  1. Terhubung ke redis. Anda dapat menggunakan perintah redis-cli(jika dijalankan pada port 6379), jika tidak Anda harus menentukan nomor port juga.
  2. Pilih basis data Anda (perintah select {Index})
  3. Jalankan perintah flushdb

Jika Anda ingin membuka kunci di semua basis data, maka Anda harus mencoba flushall.

Raviraj Singh
sumber
1

Kamu bisa menggunakan FLUSHDB

misalnya

Daftar basis data:

127.0.0.1:6379> info keyspace
# Keyspace

Kunci daftar

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

Tambahkan satu nilai ke kunci

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

Buat kunci lain dengan dua nilai

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

Daftar semua nilai di key2

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

Lakukan FLUSHDB

127.0.0.1:6379> flushdb
OK

Daftar kunci dan basis data

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> info keyspace
# Keyspace
pengguna9869932
sumber
keys * command adalah perintah yang mahal. jangan jalankan perintah ini pada server redis produksi
emert117
1

Anda dapat menggunakan pendekatan berikut dalam python

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
AbhiK
sumber
0

Lebih baik jika Anda dapat memiliki RDM (Redis Desktop Manager). Anda dapat terhubung ke server redis Anda dengan membuat koneksi baru di RDM.

Setelah terhubung Anda dapat memeriksa data langsung, juga Anda dapat bermain-main dengan perintah redis.

Membuka cli di RDM.

1) Klik kanan pada koneksi Anda akan melihat opsi konsol, cukup klik di atasnya jendela konsol baru akan terbuka di bagian bawah RDM.

Kembali ke pertanyaan Anda FLUSHALL adalah perintahnya, Anda cukup mengetik FLUSHALL di cli redis.

Apalagi jika Anda ingin tahu tentang perintah redis dan penggunaannya yang tepat, buka tautan di bawah ini. https://redis.io/commands .

Manvendra Jina
sumber
0

Ada beberapa pendekatan berbeda. Jika Anda ingin melakukan ini dari jarak jauh, keluarkan flushall ke instance itu, melalui alat baris perintah redis-cli atau alat apa pun yaitu telnet, bahasa pemrograman SDK. Atau masuk saja ke server itu, matikan prosesnya, hapus file dump.rdb-nya dan appendonly.aof (cadangkan sebelum penghapusan).

不辞 长 做 岭南 人
sumber
0

Jika Anda menggunakan Java maka dari dokumentasi, Anda dapat menggunakan salah satu dari mereka berdasarkan pada use case Anda.

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

Kode:

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

Baca lebih lanjut: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster

roottraveller
sumber