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

Python &Redis:Các phương pháp hay nhất về ứng dụng Trình quản lý / Nhân viên

Vấn đề của bạn là bạn đang cố gắng chạy nhiều lệnh đồng thời với một kết nối redis duy nhất.

Bạn đang mong đợi một cái gì đó giống như

Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
command      
             LLEN test
             0

nhưng bạn đang nhận được

Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
             LLEN test
             command
0

Các kết quả trả về theo cùng một thứ tự, nhưng không có gì liên kết một chuỗi hoặc lệnh với một kết quả cụ thể. Các kết nối redis riêng lẻ không an toàn cho luồng - bạn sẽ cần một kết nối cho mỗi luồng công nhân.

Bạn cũng có thể gặp các vấn đề tương tự nếu bạn sử dụng pipelining không phù hợp - nó được thiết kế để chỉ ghi các tình huống như thêm nhiều mục vào danh sách, nơi bạn có thể cải thiện hiệu suất bằng cách giả sử LPUSH đã thành công thay vì đợi máy chủ cho bạn biết nó đã thành công sau mỗi mục. Redis sẽ vẫn trả về kết quả, nhưng chúng không nhất thiết phải là kết quả từ lệnh cuối cùng được gửi.

Ngoài ra, cách tiếp cận cơ bản là hợp lý. Có một số cải tiến mà bạn có thể thực hiện:

  • Thay vì kiểm tra độ dài, chỉ cần sử dụng LPOP không chặn - nếu nó trả về giá trị rỗng, danh sách sẽ trống
  • Thêm bộ hẹn giờ để nếu danh sách trống, nó sẽ đợi thay vì chỉ đưa ra một lệnh khác.
  • Bao gồm kiểm tra hủy trong điều kiện vòng lặp while
  • Xử lý lỗi kết nối - Tôi sử dụng vòng lặp bên ngoài được thiết lập để nếu kết nối không thành công, nhân viên sẽ cố gắng kết nối lại (về cơ bản khởi động lại main ) cho một số lần thử hợp lý trước khi chấm dứt hoàn toàn quy trình worker.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách chuyển hướng đầu ra của đăng ký redis

  2. Duy trì kết nối Redis đang mở bằng BookSleeve

  3. Django Celery nhận số lượng nhiệm vụ

  4. Redis cơ sở dữ liệu trên máy phát triển với nhiều dự án

  5. Kiến trúc Microservices để truy cập dữ liệu thường xuyên; trong giải pháp bộ nhớ?