मैं Redis में सब कुछ कैसे हटाऊं?


709

मैं सभी कुंजियों को हटाना चाहता हूं। मैं चाहता हूं कि सब कुछ मिटा दिया जाए और मुझे एक खाली डेटाबेस दिया जाए।

क्या रेडिस क्लाइंट में ऐसा करने का कोई तरीका है ?


3
मुझे आश्चर्य है कि क्यों del *काम नहीं करता है यह 0.
क्लो

1
रिडिस सर्वर को रिस्टार्ट करने से इसमें सारा डाटा साफ हो जाएगा, रीत ?? @Timex
AATHITH RAJENDRAN

जवाबों:


1177

रेडिस-क्ली के साथ:

  • FLUSHDB - कनेक्शन के वर्तमान डेटाबेस से सभी कुंजी हटाता है।
  • फ्लश - सभी डेटाबेस से सभी कुंजियों को हटाता है।

उदाहरण के लिए, आपके शेल में:

redis-cli flushall

1
जब मैं ऊपर की कोशिश करता हूं तो मुझे निम्नलिखित त्रुटि मिलती है (error) LOADING Redis is loading the dataset in memory। क्या आप बता सकते हैं कि क्यों?
राम पात्रा

4
@ रामस्वरुप - आपने रेडिस को फिर से शुरू किया और यह वर्तमान में लगातार भंडारण से डेटा लोड कर रहा है। हालांकि यह प्रक्रिया (लोडिंग) सक्रिय है, आप DB में हेरफेर नहीं कर सकते। या तो इसके समाप्त होने का इंतजार करें, या Redis w / o दृढ़ता को कॉन्फ़िगर करें और इसे पुनः आरंभ करें (यह खाली शुरू हो जाएगा ताकि आपको एक बार यह करने के बाद FLUSHALL करने की आवश्यकता न हो)।
इटमार हैबर

@ItamarHaber मदद के लिए धन्यवाद, मैं भी एक ही समझ में आया।
राम पात्रा

1
@ यदि आपके पास C # में रेडिस क्लाइंट लाइब्रेरी नहीं है, तो आप बस उस कमांड को चला सकते हैं, जैसे: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
ईसाई

2
-hRedis सर्वर स्थान को निर्दिष्ट करने के लिए ध्वज का उपयोग करें
एडम F

194

सिर कि FLUSHALLoverkill हो सकता है। FLUSHDBकेवल एक डेटाबेस फ्लश करने के लिए एक है। FLUSHALLपूरे सर्वर को मिटा देगा। जैसा कि सर्वर के हर डेटाबेस में होता है। चूँकि प्रश्न एक डेटाबेस को फ्लश करने के बारे में था, मुझे लगता है कि यह एक अलग उत्तर देने के लिए एक महत्वपूर्ण पर्याप्त अंतर है।


4
मेरे से +1, मुझे लगा कि यह वास्तव में बेहतर उत्तर था। दी, ओपी का प्रश्न "सब कुछ मिटा देना" कहता है, लेकिन इसके बाद "मुझे एक रिक्त डेटाबेस दें" - चाहे वह वास्तव में क्या अर्थ रखता हो, मुझे लगता है कि आपके द्वारा किया गया भेद कम से कम कहने के लिए उपयोगी है।
dgg

28

अब तक के उत्तर बिल्कुल सही हैं; वे सभी चाबियाँ हटाते हैं।

हालाँकि, यदि आप भी Redis उदाहरण से सभी Lua स्क्रिप्ट हटाना चाहते हैं, तो आपको इसका अनुसरण करना चाहिए:

SCRIPT फ्लश

ओपी दो सवाल पूछता है; यह दूसरा प्रश्न पूरा करता है ( सब कुछ मिटा दिया गया)।


4
नहीं, उन्होंने एक सवाल पूछा और दो साल में तब से रेडिस में गुंजाइश बढ़ गई। ओपी का सवाल विशेष रूप से चाबियाँ हटाने के बारे में था। आप इस एक से अलग प्रश्न का उत्तर दे रहे हैं।
असली बिल

15
@ TheRealBill आपको यह सोचना है कि वर्तमान और भविष्य के SO पाठकों के लिए क्या उपयोगी है। यहाँ उत्तर ओपी के I want everything wiped out and give me a blank database.प्रश्न को संबोधित नहीं करते थे । तो, imho, मेरा जोड़ एक अच्छा है, जिसने कुछ लोगों की मदद की है। निस्संकोच असहमत महसूस करें, वह भी एसओ के बारे में।
ट्वर्ट बर्ट

2
संदर्भ सब कुछ है, और पहला वाक्य इसे स्थापित करता है: "मैं सभी कुंजियों को हटाना चाहता हूं"। एक अलग उत्तर देने के लिए प्रश्न को फिर से लिखना मुझे एसओ के बारे में नहीं बताया गया है। यह दिए गए प्रश्न को पूछने के बारे में है - इसलिए समीक्षा के तहत उत्तर को इंगित करने वाला मॉडरेशन ध्वज एक अलग प्रश्न का उत्तर दे रहा है। लेकिन, राय अलग है।
असली बिल

यदि आप सर्वर को स्वयं चला रहे हैं, तो सब कुछ मिटा देने का सबसे तेज़ तरीका सर्वर को मारना और इसे फिर से
चालू

18

FLUSHALL सभी डेटाबेस से सभी चाबियाँ निकालें

FLUSHDB वर्तमान डेटाबेस से सभी कुंजी निकालें

SCRIPT FLUSH स्क्रिप्ट कैश से सभी स्क्रिप्ट निकालें।


15

यदि आप रेडिस-आरबी रत्न का उपयोग कर रहे हैं तो आप बस कॉल कर सकते हैं:

your_redis_client.flushdb

11

यह विधि मेरे लिए काम करती है - अपने 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());
        }
    }

}

7

मेरी तरफ से एक और विकल्प:

हमारे उत्पादन और पूर्व-उत्पादन डेटाबेस में हजारों कुंजियाँ हैं। समय-समय पर हमें कुछ चाबियों (कुछ मुखौटा द्वारा) को हटाने की जरूरत है, कुछ मानदंडों आदि द्वारा संशोधित किया जाना चाहिए, विशेष रूप से सीएलआई से इसे मैन्युअल रूप से करने का कोई तरीका नहीं है, विशेष रूप से शार्किंग (प्रत्येक भौतिक में 512 तार्किक डीएस)।

इस काम के लिए मैं जावा क्लाइंट टूल लिखता हूं जो यह सब काम करता है। चाबियाँ हटाने के मामले में उपयोगिता बहुत सरल हो सकती है, केवल एक ही वर्ग वहां:

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 मिनट तक नहीं खर्च होता है।


5

FLUSHALL सभी एक्सिसिटिंग डेटाबेस की सभी कीज को डिलीट कर देता है। FOR रेडिस संस्करण> 4.0, FLUSHALL ASYNC समर्थित है जो सर्वर को अवरुद्ध करने वाली पृष्ठभूमि थ्रेड wjthout में चलती है https://redis.io/commands/flushall को

FLUSHDB - चयनित डेटाबेस में सभी कुंजियों को हटाता है। https://redis.io/commands/flushdb

संचालन करने का समय जटिलता ओ (एन) होगा जहां एन डेटाबेस में कुंजी की संख्या है।

रेडिस से प्रतिक्रिया एक साधारण स्ट्रिंग "ओके" होगी


4

आप FLUSHALL का उपयोग कर सकते हैं जो आपके हर डेटाबेस से सभी कुंजी को हटा देगा। जहां FLUSHDB हमारे वर्तमान डेटाबेस से सभी कुंजियों को हटा देगा।


4

FLUSHALL ASYNCअगर (Redis 4.0.0 या अधिक) का उपयोग कर रहे हैं, तो उपयोग करें FLUSHALL

https://redis.io/commands/flushall

नोट : निष्पादित करने FLUSHALL ASYNCसे पहले सब कुछ बेदखल कर दिया जाएगा। निष्पादन के दौरान किए गए परिवर्तन FLUSHALL ASYNCअप्रभावित रहेंगे।


3
  1. रेडिस उदाहरण बंद करो।
  2. RDB फ़ाइल हटाएं।
  3. Redis उदाहरण प्रारंभ करें।

3

रेडिस-क्ली खोलें और टाइप करें:

FLUSHALL

1
यद्यपि आपकी पोस्ट प्रश्न का उत्तर दे सकती है, लेकिन इसमें कुछ प्रलेखन का अभाव है। कृपया अपना उत्तर संपादित करें और उन्हें प्रदान करें।
नरक

2

मुझे लगता है कि कभी-कभी रेडिस-सर्वर को बंद करें और rdb files aof फ़ाइलों को हटा दें stop सुनिश्चित करें कि कोई डेटा पुनः लोड नहीं किया जा सकता है। फिर रेडिस-सर्वर शुरू करें, अब यह नया और खाली है।


2

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

यह क्लाइंट से जुड़े (होस्ट और पोर्ट के साथ) सभी डेटा को हटा देगा


2

Redis- सर्वर का उपयोग शुरू करने के बाद: service redis-server start --port 8000या redis-server

redis-cli -p 8000एक अलग टर्मिनल में क्लाइंट के रूप में सर्वर से कनेक्ट करने के लिए उपयोग करें ।

आप या तो उपयोग कर सकते हैं

  1. FLUSHDB - वर्तमान में चयनित DB की सभी कुंजियों को हटा दें। यह आदेश कभी विफल नहीं होता। इस ऑपरेशन के लिए समय-जटिलता ओ (एन) है, एन डेटाबेस में कुंजियों की संख्या है।
  2. FLUSHALL - सभी मौजूदा डेटाबेस की सभी कुंजियों को हटा दें, न केवल वर्तमान में चयनित एक। यह आदेश कभी विफल नहीं होता। इस ऑपरेशन के लिए समय-जटिलता ओ (एन) है, एन सभी मौजूदा डेटाबेस में कुंजी की संख्या है।

दोनों के लिए 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')

1

आपके प्रश्न डेटाबेस में संपूर्ण कुंजियों को हटाने के बारे में प्रतीत होते हैं। इस मामले में आपको प्रयास करना चाहिए:

  1. रेडिस से कनेक्ट करें। आप कमांड का उपयोग कर सकते हैंredis-cli (यदि पोर्ट 6379 पर चल रहा है), अन्यथा आपको पोर्ट नंबर भी निर्दिष्ट करना होगा।
  2. अपना डेटाबेस (कमांड select {Index}) चुनें
  3. आज्ञा का पालन करें flushdb

यदि आप सभी डेटाबेस में चाबियाँ फ्लश करना चाहते हैं, तो आपको कोशिश करनी चाहिए flushall



1

आप उपयोग कर सकते हैं 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"

Do 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

चाबियाँ * कमांड एक महंगी कमांड है। इस कमांड को एक प्रोडक्शन रेडिस सर्वर पर न चलाएं
उभरते हुए

1

आप अजगर में निम्नलिखित दृष्टिकोण का उपयोग कर सकते हैं

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

यदि आप RDM (Redis Desktop Manager) कर सकते हैं तो यह बेहतर है। आप RDM में एक नया कनेक्शन बनाकर अपने रेडिस सर्वर से जुड़ सकते हैं।

एक बार इसके कनेक्ट होने के बाद आप लाइव डेटा की जांच कर सकते हैं, साथ ही आप किसी भी रेडिस कमांड के साथ खेल सकते हैं।

आरडीएम में एक क्लीयर खोलना।

1) कनेक्शन पर राइट क्लिक करें आपको एक कंसोल विकल्प दिखाई देगा, बस उस पर क्लिक करें आरडीएम के निचले भाग में एक नई कंसोल विंडो खुलेगी।

अपने सवाल पर वापस आना FLUSHALL कमांड है, आप बस Redis cli में FLUSHALL टाइप कर सकते हैं।

इसके अलावा यदि आप किसी भी रेडिस कमांड और उसके उचित उपयोग के बारे में जानना चाहते हैं, तो नीचे दिए गए लिंक पर जाएं। https://redis.io/commands


0

अलग-अलग दृष्टिकोण हैं। यदि आप इसे रिमोट से करना चाहते हैं, तो फ्लशहॉल को उस उदाहरण पर जारी करें, जो कमांड लाइन टूल रेडिस-क्ली या जो भी टूल यानी टेलनेट, एक प्रोग्रामिंग भाषा एसडीके के माध्यम से जारी करता है। या बस उस सर्वर में लॉग इन करें, प्रक्रिया को मारें, उसके डंप को हटाएं। पीडीएफ फाइल और appendonly.aof (डिलीट करने से पहले उन्हें बैकअप करें)।


0

यदि आप जावा का उपयोग कर रहे हैं तो प्रलेखन से, आप अपने उपयोग के मामले के आधार पर उनमें से किसी एक का उपयोग कर सकते हैं।

/**
 * 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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.