Tôi muốn xóa tất cả các phím. Tôi muốn mọi thứ bị xóa sổ và cho tôi một cơ sở dữ liệu trống.
Có cách nào để làm điều này trong Redis client không?
Tôi muốn xóa tất cả các phím. Tôi muốn mọi thứ bị xóa sổ và cho tôi một cơ sở dữ liệu trống.
Có cách nào để làm điều này trong Redis client không?
Câu trả lời:
Với redis-cli:
Ví dụ: trong vỏ của bạn:
redis-cli flushall
(error) LOADING Redis is loading the dataset in memory
. Bạn có thể chỉ định tại sao?
(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
cờ để chỉ định vị trí máy chủ redis
Đứng đầu FLUSHALL
có thể là quá mức cần thiết. FLUSHDB
là một trong những cơ sở dữ liệu duy nhất. FLUSHALL
sẽ xóa sạch toàn bộ máy chủ. Như trong mọi cơ sở dữ liệu trên máy chủ. Vì câu hỏi là về việc xóa một cơ sở dữ liệu, tôi nghĩ rằng đây là một sự khác biệt đủ quan trọng để xứng đáng với một câu trả lời riêng biệt.
Câu trả lời cho đến nay là hoàn toàn chính xác; họ xóa tất cả các khóa.
Tuy nhiên, nếu bạn cũng muốn xóa tất cả các tập lệnh Lua khỏi phiên bản Redis, bạn nên theo dõi nó bằng cách:
OP đặt hai câu hỏi; Điều này hoàn thành câu hỏi thứ hai ( mọi thứ bị xóa).
I want everything wiped out and give me a blank database.
câu hỏi của OP nữa . Vì vậy, imho, sự bổ sung của tôi là một điều tốt, đã giúp một vài người. Vui lòng không đồng ý, đó cũng là những gì SO nói về.
FLUSHALL Hủy bỏ tất cả các phím từ tất cả các cơ sở dữ liệu
FLUSHDB Xóa tất cả các khóa khỏi cơ sở dữ liệu hiện tại
SCRIPT FLUSH Xóa tất cả các tập lệnh khỏi bộ đệm của tập lệnh.
Phương pháp này hiệu quả với tôi - xóa mọi thứ của Cơ sở dữ liệu được kết nối hiện tại trên cụm Jedis của bạn.
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());
}
}
}
Thêm một lựa chọn từ phía tôi:
Trong cơ sở dữ liệu sản xuất và tiền sản xuất của chúng tôi có hàng ngàn khóa. Thỉnh thoảng chúng ta cần xóa một số khóa (bằng một số mặt nạ), sửa đổi theo một số tiêu chí, v.v ... Tất nhiên, không có cách nào để thực hiện thủ công từ CLI, đặc biệt là có shending (512 dbs logic trong mỗi vật lý).
Với mục đích này, tôi viết công cụ máy khách java thực hiện tất cả công việc này. Trong trường hợp xóa khóa, tiện ích có thể rất đơn giản, chỉ có một lớp ở đó:
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();
}
}
Viết các loại công cụ như vậy tôi thấy rất dễ dàng và không mất quá 5-10 phút.
FLUSHALL Xóa tất cả các khóa của tất cả các cơ sở dữ liệu hiện tại. Phiên bản FOr Redis> 4.0, FLUSHALL ASYNC được hỗ trợ chạy trong luồng nền mà không chặn máy chủ https://redis.io/commands/flushall
FLUSHDB - Xóa tất cả các khóa trong Cơ sở dữ liệu đã chọn. https://redis.io/commands/flushdb
Độ phức tạp thời gian để thực hiện các hoạt động sẽ là O (N) trong đó N là số lượng khóa trong cơ sở dữ liệu.
Phản hồi từ redis sẽ là một chuỗi đơn giản "OK"
Sử dụng FLUSHALL ASYNC
nếu sử dụng (Redis 4.0.0 trở lên) khác FLUSHALL
.
https://redis.io/commands/flushall
Lưu ý : Mọi thứ trước khi thực hiện FLUSHALL ASYNC
sẽ bị đuổi. Những thay đổi được thực hiện trong quá trình thực thi FLUSHALL ASYNC
sẽ vẫn không bị ảnh hưởng.
Mở redis-cli và gõ:
FLUSHALL
tôi nghĩ đôi khi dừng máy chủ redis và xóa các tệp rdb , aof。 đảm bảo không có dữ liệu nào có thể tải lại được. sau đó khởi động máy chủ redis, bây giờ nó mới và trống.
Sau khi bạn khởi động Redis-server bằng cách sử dụng: service redis-server start --port 8000
hoặc redis-server
.
Sử dụng redis-cli -p 8000
để kết nối với máy chủ như một máy khách trong một thiết bị đầu cuối khác.
Bạn có thể sử dụng một trong hai
Kiểm tra tài liệu cho tùy chọn ASYNC cho cả hai.
Nếu bạn đang sử dụng Redis thông qua giao diện python của nó, hãy sử dụng hai chức năng này cho cùng một chức năng:
def flushall(self):
"Delete all keys in all databases on the current host"
return self.execute_command('FLUSHALL')
và
def flushdb(self):
"Delete all keys in the current database"
return self.execute_command('FLUSHDB')
Câu hỏi của bạn dường như là về việc xóa toàn bộ khóa trong cơ sở dữ liệu. Trong trường hợp này, bạn nên thử:
redis-cli
(nếu chạy trên cổng 6379), nếu không bạn cũng sẽ phải chỉ định số cổng.select {Index}
)flushdb
Nếu bạn muốn tuôn khóa trong tất cả các cơ sở dữ liệu, thì bạn nên thử flushall
.
Một cú nhấp chuột trong FastoRedis / FastoNoQuery
Bạn có thể dùng FLUSHDB
ví dụ
Liệt kê cơ sở dữ liệu:
127.0.0.1:6379> info keyspace
# Keyspace
Phím liệt kê
127.0.0.1:6379> keys *
(empty list or set)
Thêm một giá trị vào khóa
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
Tạo khóa khác với hai giá trị
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
Liệt kê tất cả các giá trị trong key2
127.0.0.1:6379> lrange key2 0 -1
1) "2"
2) "1"
Làm FLUSHDB
127.0.0.1:6379> flushdb
OK
Liệt kê các khóa và cơ sở dữ liệu
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> info keyspace
# Keyspace
bạn có thể sử dụng phương pháp sau trong 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
Sẽ tốt hơn nếu bạn có thể có RDM (Redis Desktop Manager). Bạn có thể kết nối với máy chủ redis của mình bằng cách tạo kết nối mới trong RDM.
Khi nó được kết nối, bạn có thể kiểm tra dữ liệu trực tiếp, bạn cũng có thể chơi xung quanh với bất kỳ lệnh redis nào.
Mở một cli trong RDM.
1) Nhấp chuột phải vào kết nối bạn sẽ thấy tùy chọn bàn điều khiển, chỉ cần nhấp vào nó, cửa sổ bàn điều khiển mới sẽ mở ra ở dưới cùng của RDM.
Quay trở lại câu hỏi của bạn FLUSHALL là lệnh, bạn chỉ cần gõ FLUSHALL trong redis cli.
Ngoài ra, nếu bạn muốn biết về bất kỳ lệnh redis nào và cách sử dụng phù hợp, hãy truy cập liên kết dưới đây. https://redis.io/commands .
Có nhiều cách tiếp cận khác nhau. Nếu bạn muốn làm điều này từ xa, hãy đưa ra trường hợp đó, thông qua công cụ dòng lệnh redis-cli hoặc bất kỳ công cụ nào, ví dụ như telnet, SDK ngôn ngữ lập trình. Hoặc chỉ cần đăng nhập vào máy chủ đó, hủy tiến trình, xóa tệp dump.rdb của nó và appendonly.aof (sao lưu chúng trước khi xóa).
Nếu bạn đang sử dụng Java thì từ tài liệu này, bạn có thể sử dụng bất kỳ một trong số chúng dựa trên trường hợp sử dụng của bạn.
/**
* 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();
Mã số:
RedisAdvancedClusterCommands syncCommands = // get sync() or async() commands
syncCommands.flushdb();
Đọc thêm: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster
del *
không làm việc. Nó trả về 0.