2013-06-24 40 views
2

在用戶有帖子的情況下,每個用戶都有一個代表新聞提要的視圖(非常類似於登錄的Tumblr帳戶),並且每個帖子概述都有一個鏈接到每個帖子的評論計數器,這裏最好的緩存策略是什麼(在Rails 4堆棧上)?用於個性化新聞Feed的Rails緩存技術

假設有5個用戶ABCDE,每個用戶都訂閱了他們右邊的2個用戶(A訂閱了B和C,B訂閱了C和D等),並且只有他們訂閱的用戶在他們的新聞饋送視圖中顯示。

編輯:

假設扇出上寫的方法是採取,其中每個用戶都有一個唯一的集(後IDS的)在Redis的,並且在一切post創建,新帖子的ID被附加到每個帖子創建者的朋友集。 redis集充當索引,用戶的feed通過單個SQL查詢獲取。

考慮到這一點,緩存各飼料應該是這種方法的問題:

  1. 入住Redis的設置(先打)
  2. @feed_array到memcached的
  3. 取得與單一SQL指揮所並保存到@feed
  4. @feed到memcached的
  5. 入住Redis的設置(第二擊)
  6. 如果設置值匹配@feed_array,則從memcached返回@feed。否則,新的SQL查詢和memcached的

這種方法覆蓋@feed通過@post的div進行遍歷時,將意味着意見容易緩存的使用,但如何將一個處理意見計數?

回答

4

與您正在使用的應用程序堆棧無關,我認爲緩存方法不會在您的情況下擴展。類似twitter的功能通常由解規範化來處理。

在你的情況下,這可能意味着爲每個用戶實施一個feed模型,追加追隨者的新帖子,以便從用戶自己的feed中加載用戶的'時間線',而不是加入他的所有用戶(可能數千)朋友。

+0

即使採用了你建議的扇出式寫入方法,緩存方法仍然是必要的。如果用戶有一個來自Feed模型的'時間線',並且說@feed = Feed.where(等等),那麼供稿項div仍然需要緩存,問題在於評論計數器。如何處理這些? – railsuser400

+0

順便說一句,我已經更新了這個問題。 – railsuser400

+0

@ railsuser400我不認爲你有答案。這一切都取決於你的要求。對於響應式解決方案,甚至可能不涉及緩存。你可以IE瀏覽器加載的東西(評論計數或其他)通過JavaScript,或採取一個單一的頁面方法與JavaScript的MVC。 – phoet