Redis-এ বড় অবজেক্ট ডিলিট করা কেন স্লো, সে সম্পর্কে জানতে এই সংক্ষিপ্ত ওভারভিউ পড়ুন
Redis-এ একটি বড় হ্যাশ ডিলিট করতে:
-
কীকে একটি ইউনিক, নেমস্পেসড কীতে রিনেম করুন যাতে হ্যাশটি অন্য Redis ক্লায়েন্টদের কাছে "ডিলিটড" দেখাবে azonই।
-
হ্যাশ থেকে ফিল্ডগুলো ছোট ছোট ব্যাচে ইনক্রিমেন্টালি ডিলিট করুন যতক্ষণ না হ্যাশটি খালি হয়। আমাদের ডিলিট কমান্ডের সাইজ লিমিট করে আমরা নিশ্চিত করি যে সার্ভারকে অনেকক্ষণ ব্লক করতে হয় না।
দয়া করে নোট করুন যে নিচের কোড Redis কানেকশন ফেইলার গ্রেসফুলি হ্যান্ডেল করে না। যদি কোনো Redis কমান্ড ফেইল হয় এবং এক্সেপশন থ্রো করে, তবে আপনাকে ম্যানুয়ালি ক্লিন আপ করতে হবে।
슈ডো-কোড
# কী রিনেম করুন newkey = "gc:hashes:" + redis.INCR( "gc:index" ) redis.RENAME("my.hash.key", newkey) # হ্যাশ থেকে ফিল্ডগুলো ১০০-র ব্যাচে ডিলিট করুন cursor = 0 loop cursor, hash_keys = redis.HSCAN(newkey, cursor, "COUNT", 100) if hash_keys count > 0 redis.HDEL(newkey, hash_keys) end if cursor == 0 break end end Ruby
$redis = Redis.new def delete_hash(key) # কী রিনেম করুন newkey = "gc:hashes:#{$redis.incr("gc:index")}" $redis.rename(key, newkey) # হ্যাশ থেকে ফিল্ডগুলো ১০০-র ব্যাচে ডিলিট করুন cursor = "0" loop do cursor, fields = $redis.hscan(newkey, cursor, count: 100) hkeys = fields.map { |pair| pair[0] } $redis.hdel(newkey, hkeys) if hkeys.size > 0 break if cursor == "0" end end # উদাহরণ: # # delete_hash("my.large.hash") উপরের পদ্ধতির ব্যাকগ্রাউন্ড জব ব্যবহার করে কিছু উদাহরণ ইমপ্লিমেন্টেশন Ruby-তে:
- Resque
- Sidekiq
← "Deleting Large Objects in Redis"-এ ফিরে যান