我正在網站上工作。我想獲得關於設計的反饋。網站功能類似於Reddit,ProductHunt等(即基於投票)。以下是概述 1.後端服務從網絡獲取帖子並存儲到數據庫中。 2.帖子顯示在網站上(頂部,新)。 3.頂部按排名顯示網站(投票,時間因素)。 4.在滾動,用戶看到更多帖子基於投票的網站/應用程序的結構
設計:
數據庫表:帖子,用戶,投票
後端服務: 後端服務定期並將從Web上獲取的職位爲DB(帖子表)。
網站: 當用戶訪問網站的用戶看到最新帖子。根據請求,網站代碼查詢數據庫,該數據庫返回基於時間和投票排名的鏈接。當使用特定帖子投票時,網站代碼將其添加到數據庫。網站允許登錄並將用戶信息存儲在用戶表中。
問題: 我應該考慮使用Redis緩存而不是查詢數據庫來獲取每個請求上的排名帖子嗎?如果是,那麼應該存入什麼緩存以及更新緩存的邏輯是什麼?
如果我最終使用緩存,那麼緩存應該有兩個條目。 1.排名的職位1.新職位。對於排名後的應該定期後臺服務更新緩存?和新的職位,我應該無效緩存每當新的帖子從網頁中獲取?
也如何處理無限滾動,如果我去緩存路由?示例:用戶根據排名查看帖子。用戶在15分鐘後滾動查找新帖子。那時排名可能已經改變。
我將不勝感激任何反饋/幫助!
謝謝@Liviu!確實非常有用。我仍然無法找出分頁。讓我們舉個例子:基於投票的有序集:a,b,x,g,d,e,c,f,y,s。基於投票的10件物品的訂單。頁面顯示5項。當用戶滾動下5個項目時顯示。在用戶滾動查找下一個項目之前,請設置更改和發佈順序。新集合看起來像:a,b,f,y,x,g,s,d,e,c。一些項目從前5移到下一個桶,第二頁的一些項目移到第一個。滾動會給重複的項目以及它會錯過一些項目。 –
沒有完美的解決方案,最簡單的方法是在用戶請求時創建一個快照(如果有很多併發用戶,這會消耗大量內存)。但是如果你想在服務器上有一個遊標,你需要一些id來轉發它,而不是集合的大小。在你的情況下,如果分數只能上升,那麼就有可能使用它。你在第一頁上收到的最後一個元素是d,所以你需要記住它的分數,當你問第二頁時,你只需要從該分數下降,所以你應該只接收e和c,從而避免重複。 https://dev.twitter.com/rest/public/timelines –