當用戶(消費者)死亡後,您的列表將繼續增長,直到客戶端返回。一旦達到特定的限制,你的製作人可以調整列表(從任一側),但這是你需要在應用程序級別處理的事情。如果您在每封郵件中包含時間戳,則假設您在郵件使用年限內擁有要執行的應用程序邏輯,那麼您的客戶可以根據郵件的年齡進行操作。
我不確定一個格式錯誤的消息如何進入系統,因爲與Redis的連接通常是TCP完整性保證。但是,如果發生這種情況,可能是由於生產者層的消息編碼存在錯誤,您可以通過保持每個接收消費者異常消息的生產者隊列來提供處理錯誤的一般機制。
重試策略將取決於您的應用程序需求。如果您需要100%確保已收到並處理消息,則應考慮使用Redis事務(MULTI/EXEC)來包裝消費者完成的工作,以確保客戶端不會除去消息,除非它已經完成了它的工作。如果您需要明確的確認,那麼您可以在專用於生產者進程的隊列上使用明確的ACK消息。
不知道更多關於您的應用程序需求,很難知道如何明智地選擇。通常,如果您的消息需要完整的ACID保護,那麼您可能還需要使用redis事務。如果您的消息只在及時發送時纔有意義,則可能不需要交易。這聽起來好像你不能容忍丟棄的消息,所以你使用列表的方法是好的。如果您需要爲消息實現優先級隊列,則可以使用排序集(Z命令)來存儲消息,並將其優先級用作分數值以及輪詢消費者。
......我想送位置更新給客戶....而一旦斷開,我不知道如何客戶端和服務器之間的數據同步...你解決問題?如果是的話,怎麼樣? – 2016-05-14 08:15:18
您可以在http://redis.io/commands/rpoplpush檢查一個可靠的隊列Redis的模式 – hgf 2014-10-23 01:21:02