2014-09-26 27 views
0

我是Redis的新手。我正在設計一個發佈/訂閱機制,其中爲每個連接至少一個用戶(瀏覽器)的客戶端(業務客戶端)提供了一個特定的渠道。這些用戶然後接收他們所屬的客戶的信息。Redis過時數據

我需要Redis,因爲我有一個分佈式系統,所以存在一個後端將數據推送到相應的客戶端通道,然後存在一個擁有用戶連接(websockets)的自己的服務器(多個實例)的webapp。

恢復:

  • 後端是出版商和web應用程序服務器是所述訂戶
  • 客戶端有多個用戶每客戶端
  • 一個通道與至少1用戶連接
  • 如果客戶端沒有連接用戶,則不存在通道
  • 後端將數據推送到現有客戶端通道
  • Webapp服務器從對應於連接到其自身的用戶的客戶端通道消費數據只有

因此,爲了減少工作量,從我的後端我不想將數據推送到沒有連接用戶的客戶端。因此,我似乎需要將我的Web應用程序中已連接的用戶列表分享給我的後端,以便後端可以決定將哪些客戶端數據推送到Redis。共享該部分數據的顯而易見的解決方案將是相同的Redis實例。

我的做法是在Redis的一個關鍵的東西是這樣的:

[USERSUser1/ClientA/WebappServer1, User2/ClientB/WebappServer1, User3/ClientA/WebappServer2]

所以在這裏我的問題是...

我如何克服陳舊的數據,例如,如果我的一個Web應用程序節點崩潰,我t沒有機會從Redis中刪除已連接的用戶列表?

非常感謝!

回答

1

首先,好運與整個項目 - 聽起來充滿挑戰和樂趣:)

我會使用一個稍微不同的設計讓我的用戶的軌跡 - 讓每個客戶端/的webapp維護一組(可能與分類登錄時間作爲分數)的用戶。爲該集合設置一個TTL並讓客戶端/ web應用程序定期重置它,否則它將在擁有進程崩潰時過期。

+0

感謝Itamar的建議。我最終做的是爲每個擁有連接用戶的客戶端設置一個過期時間爲幾分鐘的密鑰,然後每個Webapp節點定期重置該過期時間。後端然後將數據發佈到只有那些擁有相應密鑰的客戶端。 – 2014-09-29 01:04:07