Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Xóa Hiệu Quả List Lớn Trong Redis: Hướng Dẫn Bước Đi

Để tìm hiểu thêm về tại sao xóa đối tượng lớn chậm trong Redis, hãy đọc tổng quan nhanh này

Để xóa một list lớn trong Redis:

  1. Đổi tên khóa thành một khóa duy nhất, có namespace để list xuất hiện như "đã xóa" đối với các Redis client khác ngay lập tức.

  2. Xóa tăng dần các phần tử từ list theo lô nhỏ cho đến khi nó rỗng. Bằng cách giới hạn kích thước các lệnh xóa, chúng ta đảm bảo không chặn server quá lâu.

Lưu ý rằng mã sau không xử lý nhẹ nhàng các lỗi kết nối Redis. Nếu bất kỳ lệnh Redis nào thất bại và ném ngoại lệ, bạn sẽ cần dọn dẹp thủ công.

Mã Giả (Pseudo-code)

# Đổi tên khóa
newkey = "gc:hashes:" + redis.INCR("gc:index")
redis.RENAME("my.list.key", newkey)
# Cắt bỏ phần tử theo lô 100
while redis.LLEN(newkey) > 0
  redis.LTRIM(newkey, 0, -99)
end

Ruby

$redis = Redis.new
def delete_list(key)
  # Đổi tên khóa
  newkey = "gc:lists:#{$redis.incr("gc:index")}"
  $redis.rename(key, newkey)
  # Cắt bỏ phần tử theo lô 100
  while $redis.llen(newkey) > 0
    $redis.ltrim(newkey, 0, -99)
  end
end
# Ví dụ:
# delete_list("my.large.list")

Dưới đây là một số ví dụ triển khai trên sử dụng background jobs trong Ruby:

  • Resque
  • Sidekiq

← Quay lại "Xóa Đối Tượng Lớn Trong Redis"