2014-01-06 41 views
2

我正在用java構建一個推送服務器,並且正在計劃使用Redis PubSub來排列要發送給客戶端的消息。Jedis許多用戶

現在我的實現每個設備都有一個redis訂戶。因此,當設備上線時,它會爲其設備訂閱redis隊列。

這個比例是否合適/有沒有更好的方法?我會有成千上萬的訂戶。

回答

2

每個設備的用戶應該正常工作。我認爲擴展性問題主要圍繞你發佈給每個訂閱者的信息以及消息實際存在的位置。您可能還需要考慮在某些時候運行多個Redis實例,可能由Redis Sentinel管理,以確保高可用性。如果主服務器不可用,則Redis Sentinel將處理提升其中一個從服務器redis實例的權限,然後在原來的主服務器返回時趕回主服務器並趕上。

如果消息對每個用戶都是唯一的,那麼發送消息給每個用戶似乎是一個好方法。請注意,redis中的pub/sub不提供持久性,所以如果我的用戶斷開連接或崩潰或返回,自從上次訂閱以來發送的所有消息都無法提供給他。如果您需要持久性,那麼消息應該可能會轉到每個訂戶的LIST,並且在通道上發佈的內容應該只是通知客戶端新消息可用。用戶可以隨時從LIST中彈出任何消息,直到LIST爲空。任何時候收到通知時都會重複此過程。

如果一條消息正在廣播給所有或許多客戶端,那麼您應該考慮將消息本身存儲在redis密鑰或列表或其他內容中,並在每個受影響客戶端的頻道上發佈新消息可用和哪裏(什麼關鍵)來閱讀它。您可以使用多種策略來追蹤哪些訂閱者閱讀過哪些郵件並刪除所有人閱讀的舊郵件。