আমি কীভাবে রেডিসের সমস্ত কিছু মুছব?


709

আমি সমস্ত কী মুছে ফেলতে চাই। আমি সবকিছু মুছতে চাই এবং আমাকে একটি ফাঁকা ডাটাবেস দিন।

রেডিস ক্লায়েন্টে এটি করার কোনও উপায় আছে ?


3
ভাবছি কেন del *কাজ হয় না। এটি 0. ফিরে আসে
ক্লো

1
redis সার্ভারটি পুনরায় চালু করলে এতে সমস্ত ডেটা পরিষ্কার হয়ে যাবে, ?? @ টাইমেক্স
আতিথ রাজেন্দ্র

উত্তর:


1177

রেডিস-ক্লাই্ট সহ:

  • FLUSHDB - সংযোগের বর্তমান ডাটাবেস থেকে সমস্ত কী মুছে ফেলে।
  • ফ্লাশ - সমস্ত ডাটাবেস থেকে সমস্ত কী মুছে ফেলা হয়।

উদাহরণস্বরূপ, আপনার শেলের মধ্যে:

redis-cli flushall

1
আমি যখন উপরেরটি চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই (error) LOADING Redis is loading the dataset in memory। আপনি নির্দিষ্ট করতে পারেন কেন?
রাম পাত্র

4
@ রাম্বরূপ - আপনি রেডিস পুনরায় চালু করেছেন এবং এটি বর্তমানে ধ্রুব স্টোরেজ থেকে ডেটা লোড করছে। এই প্রক্রিয়াটি (লোডিং) সক্রিয় থাকাকালীন আপনি ডিবি কে হেরফের করতে পারবেন না। হয় এটি শেষ হওয়ার জন্য অপেক্ষা করুন, বা রেডিস ডাব্লু / ও অধ্যবসায়টি কনফিগার করুন এবং এটি পুনরায় চালু করুন (এটি খালি শুরু হবে যাতে এটি শেষ হওয়ার পরে আপনাকে ফ্লুশল করার প্রয়োজন হবে না)।
ইত্তামার হাবর

@ ইতমারহ্যাবার সহায়তার জন্য ধন্যবাদ, আমিও এটি আবিষ্কার করেছি।
রাম পাত্র

1
@ নয় আপনি যদি সি # তে রেডিস ক্লায়েন্ট লাইব্রেরি না রাখেন তবে আপনি সহজেই সেই আদেশটি চালাতে পারেন: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
খ্রিস্টান

2
-hএকটি redis সার্ভারের অবস্থান নির্দিষ্ট করতে পতাকাটি ব্যবহার করুন
অ্যাডাম এফ

194

হেডস আপ যা FLUSHALLওভারকিল হতে পারে। FLUSHDBকেবলমাত্র একটি ডাটাবেস ফ্লাশ করার জন্য। FLUSHALLপুরো সার্ভারটি মুছে ফেলবে। যেমন সার্ভারে প্রতিটি ডাটাবেস। যেহেতু প্রশ্নটি একটি ডাটাবেস ফ্লাশ করার বিষয়ে ছিল বলে আমি মনে করি এটি একটি পৃথক উত্তর যোগ্যতা অর্জনের জন্য যথেষ্ট গুরুত্বপূর্ণ পার্থক্য।


4
আমার কাছ থেকে +1, আমি ভেবেছিলাম এটি আসলে এটির চেয়ে ভাল উত্তর। মঞ্জুর, ও.পি. এর প্রশ্নটি "সবকিছু মুছে ফেল" বলেছে কিন্তু এর পরে "আমাকে একটি ফাঁকা ডাটাবেস দিন" - তিনি আসলে কী বোঝাতে চেয়েছিলেন তা বিবেচনা না করেই, আমি মনে করি আপনি যে পার্থক্যটি করেছেন তা দরকারী, কমপক্ষে বলতে হবে।
ডগ

28

এখনও পর্যন্ত উত্তরগুলি একেবারে সঠিক; তারা সমস্ত কী মুছে দেয়।

তবে আপনি যদি সমস্ত লুয়া মুছতে চান তবে রেডিস উদাহরণ থেকে স্ক্রিপ্টগুলি এটি অনুসরণ করা উচিত:

স্ক্রিপ্ট ফ্লুশ

ওপি দুটি প্রশ্ন জিজ্ঞাসা করে; এটি দ্বিতীয় প্রশ্নটি সম্পূর্ণ করে ( সবকিছু মুছে ফেলা)।


4
না, তিনি একটি প্রশ্ন জিজ্ঞাসা করেছিলেন এবং তার পর থেকে দুই বছরে রেডিসের পরিধি আরও বেড়েছে। ওপির প্রশ্নটি ছিল কীগুলি মুছে ফেলার বিষয়ে বিশেষভাবে। আপনি এই প্রশ্নের চেয়ে আলাদা প্রশ্নের উত্তর দিচ্ছেন।
আসল বিল

15
@ TheRearBill আপনার বর্তমান এবং ভবিষ্যতের SO পাঠকদের জন্য কী দরকারী তা নিয়ে ভাবতে হবে। এখানে উত্তরগুলি ওপি-র I want everything wiped out and give me a blank database.প্রশ্নকে আর সম্বোধন করে না । সুতরাং, ইমো, আমার সংযোজনটি একটি ভাল, যা কয়েকটি লোককে সহায়তা করেছে। দ্বিধাবিভক্ত দ্বিধায় দ্বিধা বোধ করুন, এটি এসও সম্পর্কেও রয়েছে।
টু বার্ট

2
প্রসঙ্গটি হ'ল সবকিছু এবং প্রথম বাক্যটি এটি প্রতিষ্ঠিত করে: "আমি সমস্ত কী মুছতে চাই"। একটি আলাদা উত্তর দেওয়ার জন্য প্রশ্নটি পুনরায় লিখন নয় যা আমি এসওকে বলেছি তা নয়। এটি প্রদত্ত প্রশ্ন জিজ্ঞাসা সম্পর্কে - অতএব পর্যালোচনার অধীনে উত্তর নির্দেশকারী সংযম পতাকাটি একটি পৃথক প্রশ্নের উত্তর দিচ্ছে। তবে, মতামত পৃথক।
রিয়েল বিল

আপনি যদি সার্ভারটি নিজে চালাচ্ছেন তবে সবকিছু মুছে ফেলার দ্রুততম উপায় হ'ল সার্ভারটি মেরে ফেলা এবং পুনরায় চালু করা (এটি ঘটনাক্রমে খুঁজে পাওয়া গেছে)
অ্যাকিউটসটওয়্যার

18

FLUSHALL সমস্ত ডাটাবেস থেকে সমস্ত কী সরিয়ে ফেলুন

FLUSHDB বর্তমান ডাটাবেস থেকে সমস্ত কী সরান

স্ক্রিপ্ট ফ্লুশ স্ক্রিপ্ট ক্যাশে থেকে সমস্ত স্ক্রিপ্ট মুছে ফেলুন।


15

আপনি যদি redis-rb রত্ন ব্যবহার করেন তবে আপনি কেবল কল করতে পারেন:

your_redis_client.flushdb

11

এই পদ্ধতিটি আমার পক্ষে কাজ করেছে - আপনার জেডিস ক্লাস্টারে বর্তমান সংযুক্ত ডেটাবেসগুলির সমস্ত কিছুই মুছুন।

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

ফ্লুশল সমস্ত বিদ্যমান ডাটাবেসের সমস্ত কী মুছে ফেলে। ফোর রেডিস সংস্করণ> ৪.০, ফ্লুশল এএসআইএনসি সমর্থিত যা একটি পটভূমির থ্রেডে চলে সার্ভারকে অবরুদ্ধ করে https://redis.io/commands/flushall

FLUSHDB - নির্বাচিত ডাটাবেসের সমস্ত কী মুছে ফেলে। https://redis.io/commands/flushdb

ক্রিয়াকলাপ সম্পাদনের সময় জটিলতা হ'ল ও (এন) হবে যেখানে এন ডাটাবেসের কীগুলির সংখ্যা।

রেডিসের প্রতিক্রিয়াটি একটি সাধারণ স্ট্রিং "ঠিক আছে" হবে


4

আপনি ফ্লুশল ব্যবহার করতে পারেন যা আপনার প্রতিটি ডাটাবেস থেকে সমস্ত কী মুছে ফেলবে। যেখানে FLUSHDB আমাদের বর্তমান ডাটাবেস থেকে সমস্ত কী মুছে ফেলবে।


4

FLUSHALL ASYNC(Redis 4.0.0 বা আরও বেশি) ব্যবহার করে ব্যবহার করুন FLUSHALL

https://redis.io/commands/flushall

দ্রষ্টব্য : মৃত্যুদন্ড কার্যকর করার আগে সমস্ত কিছু FLUSHALL ASYNCউচ্ছেদ করা হবে। কার্যকর করার সময় করা পরিবর্তনগুলি FLUSHALL ASYNCঅকার্যকর থাকবে।


3
  1. Redis উদাহরণ বন্ধ করুন।
  2. আরডিবি ফাইল মুছুন।
  3. Redis উদাহরণ শুরু করুন।

3

রেডিস-ক্লিপ খুলুন এবং টাইপ করুন:

FLUSHALL

1
যদিও আপনার পোস্টটি প্রশ্নের উত্তর দিতে পারে, তবে এতে কিছু ডকুমেন্টেশন নেই। আপনার উত্তর সম্পাদনা করুন এবং সেগুলি সরবরাহ করুন।
হেলো

2

আমি মনে করি কখনও কখনও রেডিস-সার্ভারটি বন্ধ করে rdb b aof ফাইলগুলি মুছে ফেলুন sure কোনও ডেটা পুনরায় লোড হচ্ছে না তা নিশ্চিত করুন। তারপরে রেডিস-সার্ভারটি শুরু করুন, এখন এটি নতুন এবং খালি।


2

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

এটি ক্লায়েন্টের সাথে সংযুক্ত সমস্ত ডেটা সরিয়ে ফেলবে (হোস্ট এবং পোর্ট সহ)


2

আপনি Redis- সার্ভারটি ব্যবহার করার পরে: service redis-server start --port 8000বা ব্যবহার করে শুরু করুনredis-server

ব্যবহার redis-cli -p 8000ভিন্ন টার্মিনালের ক্লায়েন্ট হিসাবে সার্ভারের সাথে সংযোগ করতে ।

আপনি ব্যবহার করতে পারেন

  1. FLUSHDB - বর্তমানে নির্বাচিত ডিবির সমস্ত কী মুছুন। এই আদেশটি কখনও ব্যর্থ হয় না। এই অপারেশনের সময়-জটিলতা হ'ল হে (এন), এন ডাটাবেসের কীগুলির সংখ্যা।
  2. ফ্লাশ - শুধুমাত্র বর্তমানে নির্বাচিত একটি নয়, বিদ্যমান ডাটাবেসের সমস্ত কী মুছুন। এই আদেশটি কখনও ব্যর্থ হয় না। এই অপারেশনের সময়-জটিলতা হ'ল হে (এন), এন সমস্ত বিদ্যমান ডাটাবেসে কীগুলির সংখ্যা।

উভয়ের জন্য ASYNC বিকল্পের জন্য ডকুমেন্টেশন পরীক্ষা করুন ।

যদি আপনি রেডিসকে তার অজগর ইন্টারফেসের মাধ্যমে ব্যবহার করে থাকেন তবে একই কার্যকারিতার জন্য এই দুটি ফাংশনটি ব্যবহার করুন:

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 এ সংযোগ করুন। আপনি কমান্ডটি ব্যবহার করতে পারেনredis-cli (যদি 63৩ 63৯ বন্দরে চলমান থাকে), অন্যথায় আপনাকে পোর্ট নম্বরও নির্দিষ্ট করতে হবে।
  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

কী 2 তে সমস্ত মান তালিকাবদ্ধ করুন

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

কী * কমান্ড একটি ব্যয়বহুল কমান্ড। প্রোডাকশন রেডিস সার্ভারে এই কমান্ডটি চালাবেন না
emert117

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

আরডিএম (রেডিস ডেস্কটপ ম্যানেজার) রাখতে পারলে এটি আরও ভাল। আপনি আরডিএম এ একটি নতুন সংযোগ তৈরি করে আপনার রেডিস সার্ভারের সাথে সংযুক্ত করতে পারেন।

এর সংযুক্ত হয়ে গেলে আপনি সরাসরি ডেটা পরীক্ষা করতে পারবেন, আপনি যে কোনও রেডিস কমান্ডের সাহায্যে চারপাশে খেলতে পারবেন।

আরডিএম-এ একটি ক্লাইপ খোলা হচ্ছে।

1) সংযোগে ডান ক্লিক করুন আপনি একটি কনসোল বিকল্প দেখতে পাবেন, কেবল এটিতে ক্লিক করুন আরডিএম এর নীচে একটি নতুন কনসোল উইন্ডো খুলবে।

আপনার প্রশ্নে ফিরে আসা ফ্লুশাল হ'ল আদেশটি, আপনি কেবল রেডিস ক্লাইমে ফ্লুশল টাইপ করতে পারেন।

তবুও যদি আপনি কোনও রেডিস কমান্ড এবং এর সঠিক ব্যবহার সম্পর্কে জানতে চান তবে নীচের লিঙ্কে যান। 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- ক্লাস্টার

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.