[英]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.