หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสาเหตุที่การลบวัตถุขนาดใหญ่ใน Redis ได้ช้า โปรดอ่านภาพรวมโดยย่อ
วิธีลบชุดการจัดเรียงขนาดใหญ่ใน Redis:
-
เปลี่ยนชื่อคีย์เป็นคีย์เนมสเปซที่ไม่ซ้ำกันเพื่อให้ชุดที่จัดเรียงปรากฏเป็น "ลบ" ให้กับลูกค้า Redis อื่นทันที
-
ค่อยๆ ลบสมาชิกออกจากชุดที่จัดเรียงเป็นกลุ่มเล็กๆ จนกว่าจะว่าง ด้วยการจำกัดขนาดของคำสั่งลบ เรามั่นใจว่าเราจะไม่บล็อกเซิร์ฟเวอร์นานเกินไป
โปรดทราบว่าโค้ดต่อไปนี้ไม่สามารถจัดการกับ Redis connectionfailures ได้อย่างสวยงาม หากคำสั่ง Redis ล้มเหลวและทำให้เกิดข้อยกเว้น คุณจะต้องล้างข้อมูลด้วยตนเอง
รหัสหลอก
# Rename the key
newkey = "gc:hashes:" + redis.INCR("gc:index")
redis.RENAME("my.zset.key", newkey)
# Delete members from the sorted set in batche of 100s
while redis.ZCARD(newkey) > 0
redis.ZREMRANGEBYRANK(newkey, 0, 99)
end
ทับทิม
$redis = Redis.new
def delete_sorted_set(key)
# Rename the key
newkey = "gc:zsets:#{$redis.incr("gc:index")}"
$redis.rename(key, newkey)
# Delete members from the sorted set in batches of 100
while $redis.zcard(newkey) > 0
$redis.zremrangebyrank(newkey, 0, 99)
end
end
# Example:
#
# delete_sorted_set("my.large.set")
ต่อไปนี้คือตัวอย่างการใช้งานด้านบนโดยใช้งานพื้นหลัง inRuby:
- รีเควส
- ไซด์คิก
← กลับไปที่ “การลบวัตถุขนาดใหญ่ใน Redis”