Computer >> Máy Tính >  >> Lập trình >> Redis

Xóa các bộ lớn được sắp xếp trong Redis

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

Để xóa một tập hợp được sắp xếp lớn trong Redis:

  1. Đổi tên khóa thành một khóa có không gian tên, duy nhất để tập hợp được sắp xếp xuất hiện "đã bị xóa" đối với các ứng dụng khách Redis khác ngay lập tức.

  2. Xóa dần các thành viên khỏi nhóm được sắp xếp theo từng đợt nhỏ cho đến khi hết. Bằng cách giới hạn kích thước của các lệnh xóa, chúng tôi đảm bảo rằng chúng tôi không chặn máy chủ quá lâu.

Xin lưu ý rằng đoạn mã sau không xử lý các lỗi kết nối Redis một cách linh hoạt. Nếu bất kỳ lệnh Redis nào không thành công và tạo ra một ngoại lệ, bạn sẽ cần xóa thủ công.

Mã giả

# 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

Hồng ngọc

$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")

Dưới đây là một số cách triển khai ví dụ ở trên bằng cách sử dụng công việc nền trongRuby:

  • Yêu cầu lại
  • Sidekiq

← Quay lại “Xóa các đối tượng lớn trong Redis”