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

การลบ Sorted Sets ขนาดใหญ่ใน Redis อย่างมีประสิทธิภาพ

เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับเหตุผลที่การลบออบเจ็กต์ขนาดใหญ่ช้าใน Redis อ่านภาพรวมสั้นๆ นี้

เพื่อลบ Sorted Set ขนาดใหญ่ใน Redis:

  1. เปลี่ยนชื่อคีย์เป็นคีย์เฉพาะที่มี namespace เพื่อให้ Sorted Set ปรากฏว่า "ถูกลบ" แก่ Redis clients อื่นๆ ทันที

  2. ลบสมาชิกจาก Sorted Set แบบเพิ่มทีละน้อยในแบทช์เล็กๆ จนว่าจะว่างเปล่า โดยจำกัดขนาดคำสั่งลบ เรา確保ว่าไม่บล็อกเซิร์ฟเวอร์นานเกินไป

โปรดทราบว่าโค้ดต่อไปนี้ไม่จัดการ Redis connection failures อย่างยืดหยุ่น หากคำสั่ง Redis ใดล้มเหลวและโยน exception คุณจะต้องทำความสะอาดด้วยตนเอง

Pseudo-code

# เปลี่ยนชื่อคีย์ newkey = "gc:hashes:" + redis.INCR("gc:index") redis.RENAME("my.zset.key", newkey) # ลบสมาชิกจาก Sorted Set ในแบทช์ของ 100 while redis.ZCARD(newkey) > 0 redis.ZREMRANGEBYRANK(newkey, 0, 99) end

Ruby

$redis = Redis.new def delete_sorted_set(key) # เปลี่ยนชื่อคีย์ newkey = "gc:zsets:#{$redis.incr("gc:index")}" $redis.rename(key, newkey) # ลบสมาชิกจาก Sorted Set แบบแบทช์ละ 100 while $redis.zcard(newkey) > 0 $redis.zremrangebyrank(newkey, 0, 99) end end # ตัวอย่าง: # # delete_sorted_set("my.large.set")

นี่คือตัวอย่างการนำไปใช้งานข้างต้นด้วย background jobs ใน Ruby:

  • Resque
  • Sidekiq

← กลับไป "Deleting Large Objects in Redis"