2011-07-27 35 views
544

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.Làm cách nào để xóa mọi thứ trong Redis?

Có cách nào để thực hiện việc này trong Redis khách hàng không?

+3

Tôi tự hỏi tại sao 'del * 'không hoạt động. Nó trả về 0. – Chloe

Trả lời

914

Với redis-cli:

  • FLUSHDB - Loại bỏ dữ liệu từ cơ sở dữ liệu hiện tại của kết nối của bạn.
  • FLUSHALL - Xóa dữ liệu khỏi TẤT CẢ cơ sở dữ liệu. tài liệu

Redis:

Ví dụ, trong vỏ của bạn:

redis-cli flushall 
+78

từ shell: 'redis-cli flushall' – Cmag

+1

Khi tôi thử ở trên tôi nhận được lỗi sau đây' (lỗi) LOADING Redis đang tải tập dữ liệu trong bộ nhớ'. Bạn có thể chỉ định tại sao không? –

+3

@Ramswaroop - bạn đã khởi động lại Redis và hiện đang tải dữ liệu từ bộ nhớ liên tục. Trong khi quá trình này (đang tải) đang hoạt động, bạn không thể thao tác với DB. Hãy đợi cho đến khi nó kết thúc, hoặc cấu hình Redis w/o persistence và khởi động lại nó (nó sẽ bắt đầu trống rỗng, do đó bạn sẽ không cần phải thực hiện FLUSHALL khi nó đã hết). –

159

Chú ý rằng FLUSHALL có thể overk bệnh. FLUSHDB là phương tiện chỉ xóa cơ sở dữ liệu. FLUSHALL sẽ xóa toàn bộ máy chủ. Như trong mọi cơ sở dữ liệu trên máy chủ. Kể từ khi câu hỏi là về xả một cơ sở dữ liệu tôi nghĩ rằng đây là một sự khác biệt đủ quan trọng để công nhận một câu trả lời riêng biệt.

+2

+1 từ tôi, tôi nghĩ đây là câu trả lời hay hơn. Cấp, câu hỏi của OP nói "xóa sạch mọi thứ" nhưng tiếp theo là "cung cấp cho tôi một cơ sở dữ liệu trống" - bất kể anh ta có ý gì, tôi nghĩ sự khác biệt mà bạn tạo ra rất hữu ích, để nói ít nhất. – doug

+0

Câu trả lời nên được đọc là 'flushall có thể là quá mức cần thiết ..'. – Gokul

13

Nếu bạn đang sử dụng đá quý redis-rb sau đó bạn chỉ có thể gọi:

your_redis_client.flushdb 
21

Answers cho đến nay là hoàn toàn chính xác; họ xóa tất cả các phím.

Tuy nhiên, nếu bạn cũng muốn xóa tất cả Lua kịch bản từ dụ Redis, bạn nên làm theo nó bằng cách:

SCRIPT FLUSH

Các OP hỏi 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).

+3

Không, anh ta hỏi một câu hỏi và trong hai năm kể từ đó phạm vi của Redis tăng lên. Câu hỏi của OP là cụ thể về việc xóa khóa. Bạn đang trả lời một câu hỏi khác với câu hỏi này. –

+11

@ TheRealBill Bạn phải suy nghĩ về những gì hữu ích cho người đọc SO hiện tại và trong tương lai. Các câu trả lời ở đây đã không giải quyết của OP 'Tôi muốn tất cả mọi thứ bị xóa sổ và cho tôi một cơ sở dữ liệu trống' 'câu hỏi _anymore_. Vì vậy, imho, bổ sung của tôi là một trong những tốt, đã giúp một vài người. Cảm thấy tự do để không đồng ý ofcourse, đó cũng là những gì SO là về. –

+1

Bối cảnh là tất cả mọi thứ, và câu đầu tiên thiết lập nó: "Tôi muốn xóa tất cả các phím". Viết lại câu hỏi để đưa ra một câu trả lời khác không phải là những gì tôi nói với SO. Đó là về việc đặt câu hỏi được đưa ra - do đó cờ kiểm duyệt cho biết câu trả lời đang được xem xét đang trả lời một câu hỏi khác. Nhưng, ý kiến ​​khác nhau. –

7

FLUSHALL Remove tất cả các phím từ tất cả các cơ sở dữ liệu

FLUSHDB Hủy bỏ tất cả các phím từ cơ sở dữ liệu hiện tại

SCRIPT FLUSH Hủy bỏ tất cả các kịch bản từ bộ nhớ cache kịch bản.

2

Bạn có thể sử dụng FLUSHALL sẽ xóa tất cả các khóa khỏi mọi cơ sở dữ liệu của bạn. Trường hợp FLUSHDB sẽ xóa tất cả các khóa khỏi cơ sở dữ liệu hiện tại của chúng tôi.

4

Một tùy chọn khác từ phía tôi:

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 nghìn khóa. Thỉnh thoảng, chúng ta cần phải xóa một số phím (bằng một số mặt nạ), sửa đổi bởi một số tiêu chí vv. Tất nhiên, không có cách nào để làm điều đó bằng tay từ CLI, đặc biệt là có sharding (512 logic dbs trong mỗi vật lý).

Vì 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 chì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 loại công cụ mà tôi thấy rất dễ dàng và chi tiêu không quá 5-10 phút.

6

Phương pháp này làm việc cho 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()); 
     } 
    } 

} 
2

FLUSHALL Xóa tất cả khóa của tất cả cơ sở dữ liệu hiện có. CHO Redis version> 4.0, FLUSHALL ASYNC được hỗ trợ mà chạy trong một thread nền wjthout chặn máy chủ https://redis.io/commands/flushall

FLUSHDB - Xóa tất cả các phím trong cơ sở dữ liệu được chọn. https://redis.io/commands/flushdb

Độ phức tạp thời gian để thực hiện các thao tác 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"

0

tôi nghĩ rằng đôi khi dừng lại redis-server 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. sau đó khởi động máy chủ redis, bây giờ nó mới và trống.

1
  1. Dừng phiên bản Redis.
  2. Xóa tệp RDB.
  3. Bắt đầu phiên bản Redis.
1

redis-cli -h <host> -p <port> flushall

Nó sẽ loại bỏ tất cả dữ liệu từ client kết nối (với máy chủ và cổng)

Các vấn đề liên quan