Làm cách nào để xóa mọi thứ trong Redis?


710

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?


3
Tôi tự hỏi tại sao del *không làm việc. Nó trả về 0.
Chloe

1
khởi động lại máy chủ redis sẽ dọn sạch tất cả dữ liệu trong đó, rit ?? @Timex
AATHITH RAJENDRAN

Câu trả lời:


1177

Với redis-cli:

  • FLUSHDB - Xóa tất cả các khóa khỏi cơ sở dữ liệu hiện tại của kết nối.
  • FLUSHALL - Xóa tất cả các khóa khỏi tất cả các cơ sở dữ liệu.

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

redis-cli flushall

1
Khi tôi thử ở trên tôi nhận được lỗi sau (error) LOADING Redis is loading the dataset in memory. Bạn có thể chỉ định tại sao?
Ram Patra

4
@Ramswaroop - bạn đã khởi động lại Redis và hiện đang tải dữ liệu từ bộ lưu trữ 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 DB. Hoặc đợi nó kết thúc hoặc định cấu hình Redis với sự kiên trì và khởi động lại nó (nó sẽ bắt đầu trống để bạn không cần phải thực hiện FLUSHALL sau khi nó kết thúc).
Itamar Haber

@ItamarHaber Cảm ơn sự giúp đỡ, tôi cũng đã tìm ra điều tương tự.
Ram Patra

1
@Neo nếu bạn không có thư viện máy khách redis trong C #, bạn chỉ cần chạy lệnh đó, như vậy: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian

2
Sử dụng -hcờ để chỉ định vị trí máy chủ redis
Adam F

194

Đứng đầu FLUSHALLcó thể là quá mức cần thiết. FLUSHDBlà một trong những cơ sở dữ liệu duy nhất. FLUSHALLsẽ 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.


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

28

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:

VÒI

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).


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

15
@TheRealBill Bạn phải suy nghĩ về những gì hữu ích cho độc giả SO hiện tại và tương lai. Các câu trả lời ở đây đã không giải quyết 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ề.
Tw Bert

2
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 khóa". Viết lại câu hỏi để đưa ra một câu trả lời khác không phải là điều 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.
Hóa đơn thật

Nếu bạn đang tự chạy máy chủ, cách nhanh nhất để xóa sạch mọi thứ là giết máy chủ và khởi động lại nó (vô tình phát hiện ra điều này)
acutesoftware

18

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.


15

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

your_redis_client.flushdb

11

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());
        }
    }

}

7

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.


5

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"


4

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. Như 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

Sử dụng FLUSHALL ASYNCnế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 ASYNCsẽ bị đuổi. Những thay đổi được thực hiện trong quá trình thực thi FLUSHALL ASYNCsẽ vẫn không bị ảnh hưởng.



3

Mở redis-cli và gõ:

FLUSHALL

1
Mặc dù bài viết của bạn có thể trả lời câu hỏi, nhưng nó thiếu một số tài liệu. Vui lòng chỉnh sửa câu trả lời của bạn và cung cấp những câu trả lời.
hellow

2

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.


2

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

Nó sẽ xóa tất cả dữ liệu khỏi máy khách được kết nối (với máy chủ và cổng)


2

Sau khi bạn khởi động Redis-server bằng cách sử dụng: service redis-server start --port 8000hoặ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

  1. FLUSHDB - Xóa tất cả các khóa của DB hiện được chọn. Lệnh này không bao giờ thất bại. Độ phức tạp thời gian cho thao tác này là O (N), N là số lượng khóa trong cơ sở dữ liệu.
  2. FLUSHALL - Xóa tất cả các khóa của tất cả các cơ sở dữ liệu hiện có, không chỉ cơ sở dữ liệu hiện được chọn. Lệnh này không bao giờ thất bại. Độ phức tạp thời gian cho hoạt động này là O (N), N là số lượng khóa trong tất cả các cơ sở dữ liệu hiện có.

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')

def flushdb(self):
    "Delete all keys in the current database"
    return self.execute_command('FLUSHDB')

1

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ử:

  1. Kết nối với redis. Bạn có thể sử dụng lệnh 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.
  2. Chọn cơ sở dữ liệu của bạn (lệnh select {Index})
  3. Thực hiện lệnh 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.



1

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

Phím * lệnh là một lệnh đắt tiền. không chạy lệnh này trên máy chủ redis sản xuất
emert117

1

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

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 .


0

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).


0

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.