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.
+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:
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)
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.
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
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.
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.
Catatan : Segala sesuatu sebelum dieksekusi FLUSHALL ASYNCakan digusur. Perubahan yang dilakukan selama eksekusi FLUSHALL ASYNCakan tetap tidak terpengaruh.
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.
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
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.
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')
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).
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();
del *
tidak berhasil. Ia mengembalikan 0.Jawaban:
Dengan redis-cli:
Misalnya, di shell Anda:
sumber
(error) LOADING Redis is loading the dataset in memory
. Bisakah Anda menentukan alasannya?(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
bendera untuk menentukan lokasi server redisKepala yang
FLUSHALL
mungkin berlebihan.FLUSHDB
adalah orang yang menyiram basis data saja.FLUSHALL
akan 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.sumber
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).
sumber
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.FLUSHALL Hapus semua kunci dari semua basis data
FLUSHDB Hapus semua kunci dari database saat ini
SCRIPT FLUSH Hapus semua skrip dari cache skrip.
sumber
Jika Anda menggunakan permata redis-rb maka Anda cukup menelepon:
sumber
Metode ini berfungsi untuk saya - hapus semua Database yang terhubung saat ini di kluster Jedis Anda.
sumber
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:
Menulis alat semacam itu sangat mudah dan menghabiskan tidak lebih dari 5-10 menit.
sumber
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"
sumber
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.
sumber
sumber
Gunakan
FLUSHALL ASYNC
jika menggunakan (Redis 4.0.0 atau lebih tinggi) yang lainFLUSHALL
.https://redis.io/commands/flushall
Catatan : Segala sesuatu sebelum dieksekusi
FLUSHALL ASYNC
akan digusur. Perubahan yang dilakukan selama eksekusiFLUSHALL ASYNC
akan tetap tidak terpengaruh.sumber
Buka redis-cli dan ketik:
sumber
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.
sumber
redis-cli -h <host> -p <port> flushall
Ini akan menghapus semua data dari klien yang terhubung (dengan host dan port)
sumber
Setelah Anda memulai server Redis menggunakan:
service redis-server start --port 8000
atauredis-server
.Gunakan
redis-cli -p 8000
untuk terhubung ke server sebagai klien di terminal yang berbeda.Anda bisa menggunakan keduanya
Periksa opsi dokumentasi ASYNC untuk keduanya.
Jika Anda menggunakan Redis melalui antarmuka python, gunakan dua fungsi ini untuk fungsi yang sama:
dan
sumber
Pertanyaan Anda tampaknya tentang menghapus seluruh kunci dalam database. Dalam hal ini Anda harus mencoba:
redis-cli
(jika dijalankan pada port 6379), jika tidak Anda harus menentukan nomor port juga.select {Index}
)flushdb
Jika Anda ingin membuka kunci di semua basis data, maka Anda harus mencoba
flushall
.sumber
Satu klik di FastoRedis / FastoNoSQL
sumber
Kamu bisa menggunakan
FLUSHDB
misalnya
Daftar basis data:
Kunci daftar
Tambahkan satu nilai ke kunci
Buat kunci lain dengan dua nilai
Daftar semua nilai di key2
Lakukan FLUSHDB
Daftar kunci dan basis data
sumber
Anda dapat menggunakan pendekatan berikut dalam python
sumber
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 .
sumber
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
Jika Anda menggunakan Java maka dari dokumentasi, Anda dapat menggunakan salah satu dari mereka berdasarkan pada use case Anda.
Kode:
Baca lebih lanjut: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster
sumber