Tüm anahtarları silmek istiyorum. Her şeyin silinmesini ve boş bir veritabanı vermesini istiyorum.
Redis istemcisinde bunu yapmanın bir yolu var mı ?
Tüm anahtarları silmek istiyorum. Her şeyin silinmesini ve boş bir veritabanı vermesini istiyorum.
Redis istemcisinde bunu yapmanın bir yolu var mı ?
Yanıtlar:
Redis-cli ile:
Örneğin, kabuğunuzda:
redis-cli flushall
(error) LOADING Redis is loading the dataset in memory
. Nedenini belirtebilir misiniz?
(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
Bir yeniden sunucu konumu belirtmek için bayrağı kullanın
Dikkatli FLUSHALL
olun aşırıya kaçabilir. FLUSHDB
yalnızca bir veritabanını temizleyendir. FLUSHALL
tü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.
Ş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:
OP iki soru sorar; bu ikinci soruyu tamamlar ( her şey silinir).
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.
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.
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());
}
}
}
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.
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"
Her veritabanınızdan tüm anahtarları silen FLUSHALL'u kullanabilirsiniz. FLUSHDB olarak mevcut veritabanımızdaki tüm anahtarları silecektir.
FLUSHALL ASYNC
Baş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 ASYNC
tahliye edilecektir. Yürütme sırasında yapılan değişiklikler FLUSHALL ASYNC
bundan etkilenmeyecektir.
Redis-cli'yi açın ve şunu yazın:
FLUSHALL
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ş.
Redis sunucusunu başlattıktan sonra: service redis-server start --port 8000
veya redis-server
.
redis-cli -p 8000
Sunucuya farklı bir terminalde istemci olarak bağlanmak için kullanın .
Şunlardan birini kullanabilirsiniz:
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')
Sorularınız bir veritabanındaki tüm anahtarları silmekle ilgili gibi görünüyor. Bu durumda şunları denemelisiniz:
redis-cli
(6379 numaralı bağlantı noktasında çalışıyorsa), ayrıca bağlantı noktası numarasını da belirtmeniz gerekir.select {Index}
)flushdb
Tüm veritabanlarındaki anahtarları yıkamak istiyorsanız, denemelisiniz flushall
.
FastoRedis / FastoNoSQL'de tek bir tıklama
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
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
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 .
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).
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
del *
çalışmıyor? 0 döndürür.