Redis-এ বড় বস্তু মুছে ফেলা কেন ধীর হয় সে সম্পর্কে আরও জানতে, এই দ্রুত ওভারভিউ পড়ুন
Redis এ একটি বড় হ্যাশ মুছে ফেলতে:
-
একটি অনন্য, নামস্থানযুক্ত কীতে কীটির নাম পরিবর্তন করুন যাতে হ্যাশ অবিলম্বে অন্যান্য রেডিস ক্লায়েন্টদের কাছে "মুছে ফেলা" প্রদর্শিত হয়৷
-
ক্রমবর্ধমানভাবে ছোট ব্যাচে হ্যাশ থেকে ক্ষেত্রগুলি মুছে ফেলুন যতক্ষণ না এটি খালি হয়৷ আমাদের ডিলিট কমান্ডের আকার সীমিত করে, আমরা নিশ্চিত করি যে আমরা সার্ভারটিকে খুব বেশি সময়ের জন্য ব্লক করব না৷
অনুগ্রহ করে মনে রাখবেন যে নিম্নলিখিত কোডটি রেডিস সংযোগ ব্যর্থতাগুলিকে সুন্দরভাবে পরিচালনা করে না। যদি কোন Redis কমান্ড ব্যর্থ হয় এবং একটি ব্যতিক্রম উত্থাপন করে, তাহলে আপনাকে ম্যানুয়ালি পরিষ্কার করতে হবে।
ছদ্ম-কোড
# Rename the key
newkey = "gc:hashes:" + redis.INCR( "gc:index" )
redis.RENAME("my.hash.key", newkey)
# Delete fields from the hash in batche of 100s
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
রুবি
$redis = Redis.new
def delete_hash(key)
# Rename the key
newkey = "gc:hashes:#{$redis.incr("gc:index")}"
$redis.rename(key, newkey)
# Delete fields from the hash in batches of 100
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
# Example:
#
# delete_hash("my.large.hash")
এখানে রুবিতে ব্যাকগ্রাউন্ড জব ব্যবহার করে উপরোক্ত কিছু উদাহরণ প্রয়োগ করা হল:
- উত্তর
- Sidekiq
← “Redis-এ বড় বস্তু মুছে ফেলা”-এ ফিরে যান