ฉันต้องการลบกุญแจทั้งหมด ฉันต้องการให้ทุกอย่างถูกล้างออกและให้ฐานข้อมูลเปล่าแก่ฉัน
มีวิธีทำเช่นนี้ในลูกค้าRedisหรือไม่?
ฉันต้องการลบกุญแจทั้งหมด ฉันต้องการให้ทุกอย่างถูกล้างออกและให้ฐานข้อมูลเปล่าแก่ฉัน
มีวิธีทำเช่นนี้ในลูกค้าRedisหรือไม่?
คำตอบ:
ด้วย Redis-cli:
ตัวอย่างเช่นในเปลือกของคุณ:
redis-cli flushall
(error) LOADING Redis is loading the dataset in memory
เมื่อฉันพยายามดังกล่าวข้างต้นที่ฉันได้รับข้อผิดพลาดดังต่อไปนี้ คุณช่วยระบุได้ไหม
(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
ตั้งค่าสถานะเพื่อระบุตำแหน่งเซิร์ฟเวอร์ redis
หัวขึ้นที่FLUSHALL
อาจ overkill FLUSHDB
เป็นหนึ่งในการล้างฐานข้อมูลเท่านั้น FLUSHALL
จะล้างเซิร์ฟเวอร์ทั้งหมด เช่นเดียวกับในทุกฐานข้อมูลบนเซิร์ฟเวอร์ เนื่องจากคำถามเกี่ยวกับการล้างฐานข้อมูลฉันคิดว่านี่เป็นความแตกต่างที่สำคัญพอที่จะได้คำตอบแยกต่างหาก
คำตอบจนถึงถูกต้องอย่างแน่นอน; พวกเขาลบกุญแจทั้งหมด
อย่างไรก็ตามหากคุณต้องการลบสคริปต์Luaทั้งหมดออกจากอินสแตนซ์ Redis คุณควรปฏิบัติตาม:
OP ถามสองคำถาม; สิ่งนี้จะเสร็จสิ้นคำถามที่สอง ( ทุกอย่างถูกลบทิ้ง)
I want everything wiped out and give me a blank database.
คำถามอีกต่อไป ดังนั้นอิมโฮการเพิ่มของฉันเป็นสิ่งที่ดีซึ่งช่วยคนไม่กี่คน รู้สึกอิสระที่จะไม่เห็นด้วยกับหลักสูตรนั่นเป็นสิ่งที่เป็นเรื่องเกี่ยวกับ
FLUSHALL ลบคีย์ทั้งหมดออกจากฐานข้อมูลทั้งหมด
FLUSHDB ลบคีย์ทั้งหมดออกจากฐานข้อมูลปัจจุบัน
SCRIPT FLUSH ลบสคริปต์ทั้งหมดออกจากแคชสคริปต์
หากคุณใช้อัญมณี redis-rb คุณสามารถโทรได้โดยง่าย:
your_redis_client.flushdb
วิธีนี้ใช้ได้ผลกับฉัน - ลบทุกอย่างของฐานข้อมูลที่เชื่อมต่อปัจจุบันในคลัสเตอร์ Jedis ของคุณ
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());
}
}
}
อีกหนึ่งตัวเลือกจากด้านข้างของฉัน:
ในฐานข้อมูลการผลิตและการผลิตล่วงหน้าของเรามีกุญแจนับพัน บางครั้งเราจำเป็นต้องลบคีย์บางตัว (โดยมาสก์บางตัว) ปรับเปลี่ยนตามเกณฑ์บางอย่าง ฯลฯ แน่นอนว่าไม่มีวิธีที่จะทำมันด้วยตนเองจาก CLI โดยเฉพาะอย่างยิ่งการมีเศษ (512 dbs เชิงตรรกะในแต่ละกายภาพ)
เพื่อจุดประสงค์นี้ฉันเขียนเครื่องมือไคลเอนต์ java ที่ทำงานทั้งหมดนี้ ในกรณีที่มีการลบคีย์ยูทิลิตี้อาจง่ายมากมีเพียงคลาสเดียว:
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();
}
}
การเขียนเครื่องมือประเภทนี้ฉันพบว่าง่ายมากและใช้เวลาไม่เกิน 5-10 นาที
FLUSHALL ลบคีย์ทั้งหมดของฐานข้อมูลที่มีอยู่ทั้งหมด FOr Redis version> 4.0 รองรับ FLUSHALL ASYNC ซึ่งทำงานในเธรดพื้นหลังโดยปิดกั้นเซิร์ฟเวอร์ https://redis.io/commands/flushall
FLUSHDB - ลบคีย์ทั้งหมดในฐานข้อมูลที่เลือก https://redis.io/commands/flushdb
ความซับซ้อนของเวลาในการดำเนินการจะเป็น O (N) โดยที่ N เป็นจำนวนของคีย์ในฐานข้อมูล
การตอบสนองจาก Redis จะเป็นสตริงง่าย ๆ "ตกลง"
คุณสามารถใช้ FLUSHALL ซึ่งจะลบคีย์ทั้งหมดออกจากฐานข้อมูลของคุณ โดยที่ FLUSHDB จะลบคีย์ทั้งหมดออกจากฐานข้อมูลปัจจุบันของเรา
ใช้FLUSHALL ASYNC
ถ้าใช้ (Redis 4.0.0 หรือสูงกว่า) FLUSHALL
อื่น
https://redis.io/commands/flushall
หมายเหตุ : ทุกอย่างก่อนที่จะดำเนินการFLUSHALL ASYNC
จะถูกขับไล่ การเปลี่ยนแปลงที่เกิดขึ้นระหว่างการดำเนินการFLUSHALL ASYNC
จะยังคงไม่ได้รับผลกระทบ
เปิด redis-cli และประเภท:
FLUSHALL
ฉันคิดว่าบางครั้งหยุดเซิร์ฟเวอร์ Redis และลบไฟล์ rdb เพื่อตรวจสอบให้แน่ใจว่าไม่มีข้อมูลที่สามารถโหลดซ้ำได้ จากนั้นเริ่มเซิร์ฟเวอร์ Redis ตอนนี้มันใหม่และว่างเปล่า
redis-cli -h <host> -p <port> flushall
มันจะลบข้อมูลทั้งหมดจากลูกค้าที่เชื่อมต่อ (กับโฮสต์และพอร์ต)
หลังจากที่คุณเริ่มต้น Redis เซิร์ฟเวอร์โดยใช้: หรือservice redis-server start --port 8000
redis-server
ใช้redis-cli -p 8000
เพื่อเชื่อมต่อกับเซิร์ฟเวอร์เป็นไคลเอนต์ในเทอร์มินัลอื่น
คุณสามารถใช้อย่างใดอย่างหนึ่ง
ตรวจสอบเอกสารประกอบสำหรับตัวเลือกASYNCสำหรับทั้งคู่
หากคุณกำลังใช้ Redis ผ่านทางอินเทอร์เฟซของหลามให้ใช้ทั้งสองฟังก์ชั่นสำหรับฟังก์ชั่นเดียวกัน:
def flushall(self):
"Delete all keys in all databases on the current host"
return self.execute_command('FLUSHALL')
และ
def flushdb(self):
"Delete all keys in the current database"
return self.execute_command('FLUSHDB')
ดูเหมือนว่าคำถามของคุณเกี่ยวกับการลบคีย์ทั้งหมดในฐานข้อมูล ในกรณีนี้คุณควรลอง:
redis-cli
(หากทำงานบนพอร์ต 6379) มิฉะนั้นคุณจะต้องระบุหมายเลขพอร์ตด้วยselect {Index}
)flushdb
flushall
หากคุณต้องการปุ่มล้างในฐานข้อมูลทั้งหมดแล้วคุณควรลอง
คลิกเดียวในFastoRedis / FastoNoSQL
คุณสามารถใช้ได้ FLUSHDB
เช่น
รายการฐานข้อมูล:
127.0.0.1:6379> info keyspace
# Keyspace
รายการคีย์
127.0.0.1:6379> keys *
(empty list or set)
เพิ่มหนึ่งค่าให้กับคีย์
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
สร้างคีย์อื่นด้วยค่าสองค่า
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
127.0.0.1:6379> lrange key2 0 -1
1) "2"
2) "1"
ทำFLUSHDB
127.0.0.1:6379> flushdb
OK
แสดงรายการคีย์และฐานข้อมูล
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> info keyspace
# Keyspace
คุณสามารถใช้วิธีการต่อไปนี้ในหลาม
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) คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ redis ของคุณได้โดยสร้างการเชื่อมต่อใหม่ใน RDM
เมื่อเชื่อมต่อแล้วคุณสามารถตรวจสอบข้อมูลสดได้เช่นกันคุณสามารถเล่นด้วยคำสั่ง redis
เปิด cli ใน RDM
1) คลิกขวาที่การเชื่อมต่อที่คุณจะเห็นตัวเลือกคอนโซลเพียงคลิกที่มันหน้าต่างคอนโซลใหม่จะเปิดขึ้นที่ด้านล่างของ RDM
กลับมาที่คำถามของคุณ FLUSHALL เป็นคำสั่งคุณสามารถพิมพ์ FLUSHALL ใน redis cli
นอกจากนี้หากคุณต้องการทราบเกี่ยวกับคำสั่ง redis และการใช้งานที่เหมาะสมให้ไปที่ลิงก์ด้านล่าง https://redis.io/ คำสั่ง
มีวิธีการที่แตกต่างกัน หากคุณต้องการทำสิ่งนี้จากระยะไกลให้ล้างออกด้วยอินสแตนซ์นั้นผ่านเครื่องมือบรรทัดคำสั่ง redis-cli หรือเครื่องมืออื่น ๆ เช่น telnet, SDK ภาษาโปรแกรม หรือเพียงลงชื่อเข้าใช้เซิร์ฟเวอร์นั้นฆ่ากระบวนการลบไฟล์ dump.rdb และ appendonly.aof (สำรองข้อมูลก่อนการลบ)
หากคุณใช้Javaจากเอกสารคุณสามารถใช้หนึ่งในนั้นตามกรณีการใช้งานของคุณ
/**
* 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();
รหัส:
RedisAdvancedClusterCommands syncCommands = // get sync() or async() commands
syncCommands.flushdb();
อ่านเพิ่มเติม: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster
del *
ไม่ทำงาน มันส่งคืน 0.