0

我有一個相冊系統,人們可以上傳照片並與其他用戶進行交互。我使用mySql和Redis來處理流量並存儲數據。使用Redis的通知和新聞區域

在我的系統,用戶可以按照其他用戶,如照片,提出意見和上傳新照片。

在這種情況下,我想顯示在他們的牆上(如Facebook時間軸)從用戶以下的所有事件。

例如,我跟着用戶30,40,50,60,70和80點的ID。每當他們添加一張新照片時,我都希望在我的牆上看到它們。問題是這樣的:

用戶30(他的ID)增加3張新的照片和我將這些信息輸入photoevents:30:photoids - > [55,56,57]。 可以看出在牆上像這樣:

User 30 added 3 new photos [55,56,57] 

然後用戶40加入2-新照片[5,6] 可以看出在牆上像這樣:

User 40 added 2 new photos [5,6].  
User 30 added 3 new photos [55,56,57] 

然後用戶30加入其他2張照片[58,59]

應該看到什麼?

就像那個

User 30 added 5 new photos [55,56,57,58,59].  
User 40 added 2 new photos [5,6] 

或者

User 30 added 2 new photos [58,59] 
User 40 added 2 new photos [5,6].  
User 30 added 3 new photos [55,56,57] 

對於第二種情況,我怎麼能知道什麼是最後一張照片的牆壁所有者見過?根據什麼,我應該決定「新」號碼。哪一個是合理的方法;在服務器端保持此數據(整個「最後看見」組合追隨者(如:用戶50等用戶30最後一次露面ID)或處理該客戶端支持

回答

1

在我看來這個功能應該如何處理服務器端,尤其是如果您希望用戶使用多種類型的客戶端(例如瀏覽器,電話等)

您的每個事件都應該有一個時間戳記,以便知道每個事件發生的時間以及爲了能夠執行範圍根據需要進行搜索,例如需要獲取最近24小時的事件或時間戳X後的事件。

然後,當跟隨其他用戶的用戶查看她的通知時,可以設置時間戳作爲一個檢查點來知道這個用戶已經看到了哪個事件,然後只顯示那個檢查點之後的事件。

我已經在我們的項目之一,實施時間序列中的Redis的方式是通過有序集合(http://redis.io/topics/data-types#sorted-sets)。你的情況,你可以存儲:

user1EventsKey -> [{ts1, eventKey1}, {ts2, eventKey2}, {ts3, eventKey3},... ] 
                  # This is the sorted set 
eventKey1 -> [photo1, photo2, photo3] 
eventKey2 -> [photo4, photo5] 
... 

user2Checkpoint -> tsA #where ts2 < tsA < ts3 

現在你知道下一次user2的意見,你會只顯示任何事件TSA使用ZRANGEBYSCORE user1EventsKey ts2 +inf後得到的所有事件的鍵,然後用一個你可以一個通知顯示事件。

PS。時間戳可以以UNIX格式存儲。

我希望這會有所幫助。

+0

我決定使用類似你的建議。謝謝 – ftb