2011-11-10 50 views
1

根據this question的回答,我設法使用Redis爲我的網站構建了通知流。網絡客戶端上的每個「動作」都會爲每個用戶感興趣的(follower,post commenter等)「記錄」。待處理的通知每隔一段時間使用輪詢獲取。基於Redis通知系統的問題

由於最初的需求,我做我的服務器基礎設施的刪除通知,一旦他們已提取

這個問題是什麼時候我多開(保持Redis的速度快,具有較低的內存消耗是非常重要的)一臺機器上有一臺客戶機。只有第一個會顯示通知,因爲之後會從redis彈出。

我想到了幾個解決方案,但到目前爲止我唯一合理的解決方案是:不是刪除通知,而是將其設置爲在幾個小時內過期。當然,這不會幫助解決服務器一遍又一遍地發送相同通知的問題(因爲它不會被刪除),除非我提出基於客戶端的ID或者事情,但這已經使得情況太複雜。

任何簡單的選擇?

+0

0123爲什麼不是你使用發佈/訂閱? (http://redis.io/topics/pubsub)是否有某些原因需要進行輪詢? –

回答

1

我認爲最簡單的解決方案是爲每個用戶維護一個計數器,每次添加通知時增加它並記錄通知。

然後,每個Web客戶端都可以維護已有通知的序列號。因此,在每次調查中,您只需檢查是否有基於序列標識更改的新通知。也可以不使用過期密鑰,而是使用有序集合和存儲通知集合,然後可以根據序列ID獲取所需的所有通知,並且只需從設定的時間內清除所有通知