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

ป้องกันการบล็อกเซิร์ฟเวอร์: การลบออบเจ็กต์ Redis ขนาดใหญ่อย่างมีประสิทธิภาพ

ใน Redis การลบออบเจ็กต์ non-string ขนาดใหญ่ เช่น hashes, lists, sets, และ sorted sets อาจบล็อกเซิร์ฟเวอร์เป็นเวลานาน ส่งผลให้เกิดปัญหา เช่น client-side timeouts เนื่องจากสองแง่มุมของการทำงานของ Redis:

  • Redis เป็น single-threaded หมายความว่ามันประมวลผลคำสั่งทีละคำสั่งเท่านั้น ไม่ว่าจะมี clients เชื่อมต่อกี่ตัว หากคำสั่งใช้เวลานาน ทุกคำสั่งอื่นจะต้องรอ

  • DEL เป็นการดำเนินการ O(n) สำหรับ hashes, lists, sets และ sorted sets หมายความว่าออบเจ็กต์ 1 ล้าน elements จะใช้เวลาลบประมาณ 10,000 เท่าของออบเจ็กต์ประเภทเดียวกันที่มี 100 elements

โชคดีที่ Redis ให้เครื่องมือบางอย่างมาใช้ลบออบเจ็กต์ขนาดใหญ่โดยไม่บล็อกเซิร์ฟเวอร์นานเกินไป เรารวบรวมวิธีแก้ไขไว้ที่นี่:

  • การลบ Hashes ขนาดใหญ่
  • การลบ Lists ขนาดใหญ่
  • การลบ Sets ขนาดใหญ่
  • การลบ Sorted Sets ขนาดใหญ่