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

การลบ Lists ขนาดใหญ่ใน Redis: คู่มือขั้นตอนต่อขั้นตอน

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

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

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

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

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

Pseudo-code

# เปลี่ยนชื่อคีย์ newkey = "gc:hashes:" + redis.INCR("gc:index") redis.RENAME("my.list.key", newkey) # ตัด elements ออกเป็นแบทช์ของ 100 while redis.LLEN(newkey) > 0 redis.LTRIM(newkey, 0, -99) end

Ruby

$redis = Redis.new def delete_list(key) # เปลี่ยนชื่อคีย์ newkey = "gc:lists:#{$redis.incr("gc:index")}" $redis.rename(key, newkey) # ตัด elements ออกเป็นแบทช์ละ 100 while $redis.llen(newkey) > 0 $redis.ltrim(newkey, 0, -99) end end # ตัวอย่าง: # # delete_list("my.large.list")

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

  • Resque
  • Sidekiq

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