簡體   English   中英

ASP.NET緩存管理

[英]ASP.NET Cache Management

我有三個應用程序在三個獨立的應用程序池中運行 其中一個應用程序是一個很少有人有權訪問的管理應用程序。 管理應用程序允許的功能之一是創建停機通知。 因此,當用戶進入管理應用程序並創建停機通知時,其他兩個應用程序應該接收新通知並將其顯示在登錄頁面上。

問題是這些通知被緩存,並且每個應用程序都在一個單獨的應用程序池中,管理應用程序無法清除其他兩個應用程序中的停機通知緩存。

我正試圖想辦法解決這個問題。 我唯一能想到的是在DB中插入一條記錄,表示需要清除緩存,其他兩個應用程序將在加載登錄頁面時檢查數據庫。 有沒有人有另一種可能更清潔的方法?

*旁注,這比停機通知更廣泛,但我只是以此為例。

編輯

重新啟動應用程序池是不可行的,因為它很可能會殺死后台線程。

如果我理解正確,您基本上是嘗試從管理應用程序向其他應用程序發送消息。 也許您應該考慮在可以從管理應用程序調用的這些應用程序上創建WCF服務。 如果您不想使用例如共享介質這樣的數據庫並且它不會強制您使用輪詢模型,那么這是在不同應用程序之間進行通信的標准方法。

另一種看待這種情況的方法是,這基本上是一個應用程序間消息傳遞問題,其中有許多庫已經可以幫助您解決它。 RabbitMQ就是為此而想到的。 它有一個C#客戶端都准備好了。 MSMQ是另一種潛在的技術,也是Windows附帶的技術 - 您只需安裝它即可。

如果您正在緩存數據庫信息,那么您可以嘗試設置和SqlCacheDependency

否則,我建議不要使用ASP.NET緩存,並找到使用分布式緩存方案的第三方解決方案,這樣所有應用程序都使用一個緩存,而不是3個獨立緩存。

我不是說這是最好的答案,甚至是正確的答案,這正是我所做的。

我在單獨的服務器和數據中心上有一系列電子商務網站,它們依賴於從中央后台網站位置提取目錄數據,然后在本地緩存它們。 在我的第一次迭代中,我只使用了GET請求,中心位置可以ping相應的消費網站以啟動自己的緩存刷新例程。 我在每個電子商務服務器上都使用了SSL,因為我已經進行了設置,然后可以讓后台Web應用程序通過SSL GET發送憑據以安全地啟動刷新。

在稍后階段,我們發現在后台使用套接字更有效,每個消費網站都是客戶端並監聽數據的變化。 然后,當特定帳戶發生變化時,后台網站可以與其相應的網站進行通信,然后非常具體地進行通信。 這種方法更精細,我們可以根據需要更新小塊,而不是大塊更新,但這肯定比我們的第一次嘗試更復雜。

暫無
暫無

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

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