কম্পিউটার

রেডিসে বড় হ্যাশ মুছে ফেলা হচ্ছে

Redis-এ বড় বস্তু মুছে ফেলা কেন ধীর হয় সে সম্পর্কে আরও জানতে, এই দ্রুত ওভারভিউ পড়ুন

Redis এ একটি বড় হ্যাশ মুছে ফেলতে:

  1. একটি অনন্য, নামস্থানযুক্ত কীতে কীটির নাম পরিবর্তন করুন যাতে হ্যাশ অবিলম্বে অন্যান্য রেডিস ক্লায়েন্টদের কাছে "মুছে ফেলা" প্রদর্শিত হয়৷

  2. ক্রমবর্ধমানভাবে ছোট ব্যাচে হ্যাশ থেকে ক্ষেত্রগুলি মুছে ফেলুন যতক্ষণ না এটি খালি হয়৷ আমাদের ডিলিট কমান্ডের আকার সীমিত করে, আমরা নিশ্চিত করি যে আমরা সার্ভারটিকে খুব বেশি সময়ের জন্য ব্লক করব না৷

অনুগ্রহ করে মনে রাখবেন যে নিম্নলিখিত কোডটি রেডিস সংযোগ ব্যর্থতাগুলিকে সুন্দরভাবে পরিচালনা করে না। যদি কোন 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-এ বড় বস্তু মুছে ফেলা”-এ ফিরে যান


  1. রেডিস লঞ্চপ্যাড পেশ করা হচ্ছে

  2. Redis.io রিফ্রেশ করা এবং প্রসারিত করা

  3. রেডিসে হ্যাশ ব্যবহার করা

  4. ফাস্টলি কম্পিউটে রেডিস ব্যবহার করুন