Saya ingin menghapus semua kunci. Saya ingin semuanya terhapus dan memberi saya database kosong.
Apakah ada cara untuk melakukan ini pada klien Redis ?
Saya ingin menghapus semua kunci. Saya ingin semuanya terhapus dan memberi saya database kosong.
Apakah ada cara untuk melakukan ini pada klien Redis ?
Jawaban:
Dengan redis-cli:
Misalnya, di shell Anda:
redis-cli flushall
(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 redis
Kepala 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.
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:
OP mengajukan dua pertanyaan; ini melengkapi pertanyaan kedua ( semuanya terhapus).
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.
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());
}
}
}
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.
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"
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.
Gunakan FLUSHALL ASYNC
jika menggunakan (Redis 4.0.0 atau lebih tinggi) yang lain FLUSHALL
.
https://redis.io/commands/flushall
Catatan : Segala sesuatu sebelum dieksekusi FLUSHALL ASYNC
akan digusur. Perubahan yang dilakukan selama eksekusi FLUSHALL ASYNC
akan tetap tidak terpengaruh.
Buka redis-cli dan ketik:
FLUSHALL
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 8000
atau redis-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:
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')
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
.
Satu klik di FastoRedis / FastoNoSQL
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
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
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 .
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();
Baca lebih lanjut: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster
del *
tidak berhasil. Ia mengembalikan 0.