Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

การลบรายการขนาดใหญ่ใน Redis

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสาเหตุที่การลบวัตถุขนาดใหญ่ใน Redis ได้ช้า โปรดอ่านภาพรวมโดยย่อ

หากต้องการลบรายการขนาดใหญ่ใน Redis:

  1. เปลี่ยนชื่อคีย์เป็นคีย์เนมสเปซที่ไม่ซ้ำเพื่อให้รายการปรากฏ "ลบ" ไปยังไคลเอ็นต์ Redis อื่นทันที

  2. ค่อยๆ ลบองค์ประกอบออกจากรายการเป็นกลุ่มเล็กๆ จนกว่าจะว่างเปล่า ด้วยการจำกัดขนาดของคำสั่งลบ เรามั่นใจว่าเราจะไม่บล็อกเซิร์ฟเวอร์นานเกินไป

โปรดทราบว่าโค้ดต่อไปนี้ไม่สามารถจัดการกับ Redis connectionfailures ได้อย่างสวยงาม หากคำสั่ง Redis ล้มเหลวและทำให้เกิดข้อยกเว้น คุณจะต้องล้างข้อมูลด้วยตนเอง

รหัสหลอก

# Rename the key
newkey = "gc:hashes:" + redis.INCR("gc:index")
redis.RENAME("my.list.key", newkey)

# Trim off elements in batche of 100s
while redis.LLEN(newkey) > 0
  redis.LTRIM(newkey, 0, -99)
end

ทับทิม

$redis = Redis.new

def delete_list(key)
  # Rename the key
  newkey = "gc:lists:#{$redis.incr("gc:index")}"
  $redis.rename(key, newkey)

  # Trim off elements in batches of 100
  while $redis.llen(newkey) > 0
    $redis.ltrim(newkey, 0, -99)
  end
end

# Example:
#
#   delete_list("my.large.list")

ต่อไปนี้คือตัวอย่างการใช้งานด้านบนโดยใช้งานพื้นหลัง inRuby:

  • รีเควส
  • ไซด์คิก

← กลับไปที่ “การลบวัตถุขนาดใหญ่ใน Redis”