2013-07-28 48 views
0

緩存對我來說似乎很複雜。有太多的緩存方式,我當然無法關注其中的任何一種。在我的應用程序,爲每一個用戶,他的個人資料,我顯示24個隨機用戶:如何緩存每個用戶24小時的查詢?

@random_users = User.random(24) 

現在我想緩存結果爲每個用戶24小時。因此,用戶A登錄並且查詢僅在24小時內運行一次。然後用戶B登錄併發生相同的事情。不過,我希望將每個用戶的緩存結果分開存儲。意思是,如果用戶B在用戶A之後登錄,我不希望用戶A的緩存過期。我怎樣才能做到這一點?

回答

1

爲此,您必須爲每個用戶使用不同的緩存密鑰,以便爲每個用戶分別保存此信息。例如,你可以做

@random_users = Rails.cache.fetch "random_uses_for_user_#{current_user.id}", :expire_in => 24.hours do 
    ... 
end 

假設current_user是要爲其獲取此信息的用戶。

+0

這不起作用..在我的控制器中,我有:'Rails.cache.fetch「randoms_for_user _#{current_user.id}」,:expires_in => 24.hours do @random_users = User.random(24 ) end'它首次查詢並顯示24個隨機用戶,但在隨後的頁面瀏覽或刷新頁面時無顯示隨機用戶。 – pratski

+1

在後續加載該塊沒有執行,所以你不應該有任何副作用。將分配移至塊外部 –