2011-10-05 9 views
17

Trong một ứng dụng web, nếu tôi cần viết một sự kiện vào một hàng đợi, tôi sẽ tạo một kết nối với redis để ghi sự kiện.Redis pub/sub model có yêu cầu kết nối liên tục với redis không?

Bây giờ, nếu tôi muốn một quy trình phụ trợ khác (nói một công việc daemon hoặc cron) để xử lý hoặc phản ứng việc xuất bản sự kiện bằng redis, tôi có cần kết nối liên tục không?

Ít nhầm lẫn về cách hoạt động của quy trình phụ/quán rượu này trong ứng dụng web.

+0

Một số ý tưởng đơn giản (1 bản vá) để thêm kiên trì cho PubSub nguyên bản trong Redis - http://abhinavsingh.com/customizing-redis-pubsub-for-message-persistence-part-2/ –

Trả lời

2

Tôi không hoàn toàn chắc chắn, nhưng tôi tin rằng có, pub/sub yêu cầu kết nối liên tục.

Để thay thế, tôi sẽ xem nhanh resque và cách nó xử lý điều đó. Thay vì sử dụng pub/sub nó chỉ đơn giản là thêm một mục vào một danh sách trong redis, và sau đó bất cứ điều gì daemon hoặc cron job bạn có thể sử dụng lệnh lpop để có được cái đầu tiên.

Xin lỗi vì chỉ trả lời giả và sau đó là một plug.

42

Về cơ bản trong Redis có hai mô hình thông điệp khác nhau:

  • cháy và quên đi/Một để Nhiều: Pub/Sub. Tại thời điểm một tin nhắn được PUBLISH-ed tất cả các thuê bao sẽ nhận được nó, nhưng tin nhắn này sau đó bị mất mãi mãi. Nếu một khách hàng không được đăng ký thì sẽ không có cách nào để lấy lại nó.
  • Hàng đợi hiện tại/Một đến một: Danh sách, có thể được sử dụng với các lệnh chặn như BLPOP. Với danh sách bạn có nhà sản xuất đẩy vào danh sách và một hoặc nhiều người tiêu dùng chờ đợi các yếu tố, nhưng một thông báo sẽ chỉ tiếp cận với một trong những khách hàng đang chờ đợi. Với danh sách bạn có kiên trì và thư sẽ chờ khách hàng bật chúng thay vì biến mất. Vì vậy, ngay cả khi không có ai đang nghe có một tồn đọng (lớn như bộ nhớ có sẵn của bạn, hoặc bạn có thể giới hạn việc tồn đọng bằng cách sử dụng LTRIM).

Tôi hy vọng điều này là rõ ràng. Tôi đề nghị bạn nghiên cứu các lệnh sau đây để hiểu thêm về Redis và ngữ nghĩa thông điệp:

  • LPUSH/RPUSH, RPOP/LPOP, BRPOP/BLPOP
  • PUBLISH, đăng ký, PSUBSCRIBE

Doc cho điều này lệnh có sẵn tại redis.io

+0

vì vậy tôi cần kết nối liên tục với tư cách là người đăng ký? – codecompleting

+5

Với Pub/Sub, có. Xem [this] (http://blog.joshsoftware.com/2011/01/03/do-you-need-a-push-notification-manager-redis-pubsub-to-the-rescue/) để biết ví dụ về cách để đạt được các thông điệp liên tục với Pub/Sub và một khách hàng ruby ​​tùy chỉnh. – cbrauchli