2011-02-14 76 views
10

在每個頁面的標題中,我顯示了用戶名和用戶點。這是從部分(從數據庫中獲取點)拉入的。如何在mvc中緩存部分用戶詳細信息

如何緩存此部分,以便跨每個頁面避免必須檢查用戶點的數據庫,並在24小時後再次查看(緩存到期)。另外,如果用戶註銷並且其他人登錄,它將顯示新的用戶名和點(不是先前緩存的)。

回答

2

這是用戶特定的,所以我會將它存儲在持久cookie中。因此,當用戶進行身份驗證時,您可以查詢數據庫以獲取所需的信息併發布將在24小時後過期的持久cookie。然後,在部分內容中,您將檢查cookie是否存在並從此cookie中獲取必要的數據,如果cookie不存在,則查詢數據庫並重新發送cookie。當用戶註銷時,您可以刪除cookie,儘管這不是必須的,因爲當他重新登錄時(使用相同或其他用戶名),您將再次查詢數據庫並重新發送cookie。

因爲我們住在2011年,而HTML5敲門而不是cookie,所以我可能會使用HTML5 Local Storage,如果瀏覽器不支持cookie,則會返回到cookie。

0

您的意思是:'我不想在每個操作中編寫相同的代碼來加載我的用戶數據並將其傳遞給視圖,而這會渲染部分視圖'?

如果是的話,不是改變你的的RenderPartial的RenderAction,把你的邏輯從數據庫中有獲取用戶的統計數據。

但是每次用戶請求頁面時都會執行此代碼。

您可能需要考慮將值放在HttpCache(http://msdn.microsoft.com/zh-cn/library/aa478965.aspx)中,以便您不必每次都請求數據庫。

+0

這是一種方法。爲此操作提供一個「OutputCache」屬性,該屬性每24小時過期一次,並且應該設置。 – 2011-02-14 17:18:45

1

正如Darin所說,本地存儲可能是一種選擇,但是Cookie得到更廣泛的支持,而回退機制肯定會起作用。

但是,根據您需要存儲的內容,您可能不希望將任何敏感信息存儲在cookie或任何類型的複雜數據中,因此,如果您開始添加其他碎片,cookie中的數據不會縮放您需要跟蹤的數據。我通常只使用cookie來關閉我需要從數據庫或服務器端緩存中查詢的內容。

如果使用ORM(例如NHibernate),應用程序中的顯式高速緩存可能不是您需要非常關心的事情,因爲數據將由ORM的高速緩存提供程序(本地或分佈式選項提供)高速緩存。

由於這是用戶特定的,所以另一種選擇是在用戶進行身份驗證(可以選擇使用cookie)時將此信息存儲在會話狀態服務器端。

相關問題