2011-08-04 39 views
1

我擁有存儲在HttpRuntime.Cache中的所有用戶的公用數據。存儲在會話中的值取決於HttpRuntime緩存中的值

然後我有一些用戶相關的數據存儲在會話中。

HttpRuntime.CacheCacheDependency機制,它可以用來定義緩存中項目之間的關係。

你將如何處理Session和Runtime Cache之間的依賴關係?

對CacheDependencies的補充,還有CacheItemRemovedCallback。如果可能的話,我可以在回調期間從每個會話中刪除特定的值。

回答

2

緩存依賴關係以另一種方式工作,即當緩存依賴於其他方式時,而不是依賴緩存時。

使用CacheItemRemovedCallback更新Session對象中的項是不可能的。該回調不會在特定用戶的範圍內調用,因此您無法訪問Session對象。您必須將數據保存在其他位置,以便您可以訪問所有用戶的數據,因爲取決於從緩存中移除的項目的數據可能屬於任何用戶。

+0

是的,我知道緩存依賴的目的。我認爲可能會有類似的東西可以處理會話和緩存之間的依賴關係。但是,MAYBE,將會將用戶相關數據從會話移動到存儲在運行時緩存中的某個字典或散列表中,是最簡單的方法。 –

+2

@Radex:是的,將依賴於用戶的數據存儲在它所依賴的對象中可能更容易。您可能希望保留對存在用戶數據的對象的引用集合,以便可以從'Session_End'事件清除用戶的數據。請記住,Web應用程序是多線程的,因此您需要同步訪問任何從不同用戶訪問的對象。 – Guffa