2014-08-31 12 views

Trả lời

4

Thực ra, giao thức Redis không thực sự hỗ trợ các hoạt động "kích hoạt và quên". Ngoại trừ lưu lượng truy cập pub/sub, tất cả các lệnh Redis được khớp với câu trả lời và không có cách nào để yêu cầu máy chủ Redis bỏ qua câu trả lời.

Bây giờ một số khách hàng (như StackExchange.Redis) mô phỏng chế độ "lửa và quên" thông qua triển khai không đồng bộ của giao thức. Trên thực tế, chế độ "lửa và quên" trong StackExchange.Redis rất giống với chế độ "không đồng bộ", ngoại trừ các câu trả lời đơn giản bị loại bỏ khi chúng được nhận.

Có đáng tin cậy không? Vâng, nó đảm bảo việc cung cấp như xa như TCP/IP đảm bảo việc cung cấp. Mạng sẽ cố gắng truyền tải các gói dữ liệu (cuối cùng các gói tin sẽ được truyền lại nếu một số gói bị mất), nhưng tất cả đều được TCP xử lý.

Bây giờ nếu máy chủ ngừng hoạt động hoặc quyết định đóng kết nối, máy khách sẽ chỉ biết khi nó cố gắng đọc từ ổ cắm. StackExchange.Redis có thể vui vẻ tiếp tục gửi lệnh trên một kết nối chết trong một thời gian. Nếu bạn có một middletier (như Twemproxy), tình hình có thể còn tồi tệ hơn.

Nói cách khác, lưu lượng truy cập "cháy và quên" thường sẽ được gửi tới máy chủ và không có tin nhắn nào bị mất trên mạng, nhưng nếu bạn gặp sự cố máy chủ hoặc kết nối, một số lưu lượng có thể bị mất trước khi khách hàng có một cơ hội để nhận thấy nó. Tôi sẽ gọi đây là một hành vi nỗ lực tốt nhất.

+0

Cảm ơn bạn. Câu hỏi của tôi phần lớn là nó vẫn cung cấp retries hoặc thông qua thư viện hoặc TCP cơ bản và dựa trên câu trả lời của bạn nó xuất hiện có. – DTown

Các vấn đề liên quan