簡體   English   中英

有什么方法可以使用外部進程(即不通過頁面的后台代碼)來緩存對象?

[英]Any way to cache an object using an outside process (i.e. not through a page's code-behind)?

我已經有了我的ASP.NET Web應用程序所需的第一批真正的海量數據。 到現在為止(實際上已經有兩年了!),沒有任何事情如此昂貴,以至於我不能只在Page_Load上完成它或將其存儲在ViewState或Session中。 但是現在,我需要一個對象列表,該對象保持相當靜態(最多每天更新一次),並包含約5000個對象,並且每次在Page_Load上對其進行構建都會導致加載時間受到明顯影響。

關於緩存的一些Google搜索顯示了一些非常基本的示例,例如使用Cache["myStuff"] = myObject; 一切都很好。 但是我想知道是否可以通過某種方式將Web應用程序設置為在特定時間運行更新,而不管是否正在訪問或使用該應用程序。

例如,我希望此過程可以將列表更新為每天凌晨4:00運行一次,而此時沒人使用任何東西。 因此,假設在下午的第1天,Page_Load檢查以獲取緩存的對象,但是它返回null,因此,在這種情況下,請咬緊牙關,並請求/構建第1天其余時間的列表,並將其存儲在緩存中。 在第一天的剩余時間里,沒有人需要構建對象,因為它位於緩存中並且仍然有效。

第1天結束,現在是第2天凌晨4:00。沒有人使用任何頁面。 我希望刪除從第一天開始存儲在緩存中的對象,以便人們在早上到達辦公室時,第一個訪問該頁面的人今天不需要構建該列表,已經完成了。

我唯一的想法是研究創建一個可在Windows預定任務等上運行的控制台應用程序。 但是即使那樣,我仍然不確定如何從這樣的外部應用程序與ASP.NET Web應用程序進行交互。

希望我有道理。 我想實現的目標甚至有可能嗎?

如果使用像MemCached這樣的分布式緩存,則可以創建Windows服務或控制台應用程序以填充緩存。 由於兩個應用程序(服務和Web應用程序)將使用相同的緩存,因此可以解決您的問題。

另一個解決方案是為此設置一個頁面(即/startcache.aspx),該頁面將在page_load上執行cachin。 您可以安排對該頁面的請求。 您還可以使用某種防火牆從Web應用程序外部隱藏頁面(因此,沒有人可以訪問該頁面!)。 最后,該解決方案的優點是您可以重用當前代碼,因為它將在同一項目中工作。

希望能幫助到你。

Redis是進程外第三方緩存/鍵值存儲區之外的另一種選擇。

為了減少服務器和后端的負載並提供所有每日數據(據我從問題中了解)

為什么不創建數據文件(CSV,XML,JSON)並將其作為數據點提供。

從您的問題看來,客戶端(應用程序)能夠針對該數據集運行自己的查詢。

創建這樣的文件可以在固定的時間集上完成,然后保存一次即可。 無需包括第三方方的解決方案(除了其值得尊敬的品質)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM