Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Pipelining vs Batching trong Stackexchange.Redis

Đằng sau hậu trường, SE.Redis thực hiện khá nhiều công việc để cố gắng tránh phân mảnh gói tin, vì vậy không có gì ngạc nhiên khi nó hoàn toàn tương tự trong trường hợp của bạn. Sự khác biệt chính giữa phân lô và đường ống phẳng là:

  • một lô sẽ không bao giờ được xen kẽ với các hoạt động cạnh tranh trên cùng một bộ ghép kênh (mặc dù nó có thể được xen kẽ tại máy chủ; để tránh điều đó bạn cần sử dụng multi / exec giao dịch hoặc một tập lệnh Lua)
  • một lô sẽ luôn tránh được cơ hội có các gói nhỏ hơn kích thước vì nó biết trước về tất cả dữ liệu
  • nhưng đồng thời, toàn bộ lô phải được hoàn thành trước khi có thể gửi bất kỳ thứ gì, vì vậy, điều này yêu cầu nhiều bộ đệm trong bộ nhớ hơn và có thể tạo ra độ trễ giả tạo

Trong hầu hết các trường hợp, bạn sẽ làm tốt hơn bằng cách tránh phân lô, vì SE.Redis đạt được hầu hết những gì nó tự động khi chỉ cần thêm công việc.

Như một lưu ý cuối cùng; nếu bạn muốn tránh chi phí cục bộ, một cách tiếp cận cuối cùng có thể là:

redisDB.SetAdd(string.Format(keyFormat, row.Field<int>("Id")),
    row.Field<int>("Value"), flags: CommandFlags.FireAndForget);

Điều này sẽ gửi mọi thứ xuống dây, không phải chờ phản hồi cũng như phân bổ Task chưa hoàn thành s để đại diện cho các giá trị trong tương lai. Bạn có thể muốn làm điều gì đó giống như một Ping ở cuối mà không có fire-and-quên, để kiểm tra máy chủ vẫn đang nói chuyện với bạn. Lưu ý rằng việc sử dụng fire-and-forget có nghĩa là bạn sẽ không nhận thấy bất kỳ lỗi máy chủ nào được báo cáo.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để tạm dừng hoặc tiếp tục công việc cần tây?

  2. Tìm kiếm lại tổng hợp trở lại top 5 của mỗi nhóm

  3. Làm thế nào để cải thiện mức sử dụng CPU của máy chủ Redis?

  4. Redis đang tìm kiếm biến url env redis không chắc chắn nơi đặt URI xấu của biến env (không phải là URI?):(URI ::InvalidURIError)

  5. Phơi sáng Redis với Bộ điều khiển Ingress Nginx