我正在使用ASP.NET的數據緩存API。例如:ASP.NET數據緩存 - 在應用程序域重啓後保留內容
HttpRuntime.Cache.Insert(my_data, my_key);
有沒有什麼辦法配置緩存,以便在應用程序域回收時保留其內容?
我將很多對象加載到緩存中,但每次應用程序域重新啓動時都會重新加載這些對象。假設這個問題,我無法阻止由於服務器配置而重啓AppDomain。
我正在使用ASP.NET的數據緩存API。例如:ASP.NET數據緩存 - 在應用程序域重啓後保留內容
HttpRuntime.Cache.Insert(my_data, my_key);
有沒有什麼辦法配置緩存,以便在應用程序域回收時保留其內容?
我將很多對象加載到緩存中,但每次應用程序域重新啓動時都會重新加載這些對象。假設這個問題,我無法阻止由於服務器配置而重啓AppDomain。
有什麼辦法來配置緩存,這樣,當 應用程序域回收 其內容被保留?
不。Cache對象在RAM中保存引用。期。
替代方案:
我一般喜歡#3本人,雖然有方案其他人都適合。
不能將緩存API配置爲持久存儲到SQL Server,對吧?我需要修改當前的緩存API調用以通過其他API。 – frankadelic
正確。緩存API僅適用於內存中的引用;沒有任何選項可以使條目保持不變。原因是持久性需要以某種形式進行序列化,這很昂貴。實際上,Cache API的常見用途之一是避免序列化和相關開銷。但是,如果您的數據來自SQL Server,那麼您不需要自己再保留它;如果它發生變化,您只需要得到通知,這是SqlDependency的全部內容。 – RickNZ
回收應用程序域會轉儲緩存。如果你想解決這個問題,你需要使用分佈式緩存。 Here就是一個例子。
對於最昂貴的數據,您可以使用分佈式緩存(如Memcached或速度)來緩存對象。根據對象的大小和運行時間的長短,如果對這些資源的訪問速度低於創建對象的時間,也可以將其序列化到磁盤或數據庫。
現在,由於進程內緩存與任何其他解決方案相比都超快,因爲它只是持有對內存對象的引用,所以您可能希望儘可能使用它。您可以將緩存對象的副本保留在磁盤上,直到它丟失,然後從中重新創建它並將其放置在內存中。這很棘手的是當你必須過期數據,所以只使用緩存/磁盤/ SQL組合,你不需要過期/無效的數據,否則你將需要確保你清除這兩個。例如,這也將避免無法在共享服務器上實現分佈式緩存。
這方面的進展如何? – Middletone