溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何理解ASP.NET數(shù)據(jù)庫緩存依賴

發(fā)布時間:2021-09-29 13:43:46 來源:億速云 閱讀:129 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“如何理解ASP.NET數(shù)據(jù)庫緩存依賴”,在日常操作中,相信很多人在如何理解ASP.NET數(shù)據(jù)庫緩存依賴問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何理解ASP.NET數(shù)據(jù)庫緩存依賴”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

具體如下:

一般在ASP.NET中,Cache類最酷的特點是它能根據(jù)各種依賴來良好的控制自己的行為。以文件為基礎(chǔ)的依賴是最有用的,文件依賴項是通過使用 Cache.Insert 并提供引用文件的 CacheDependency 對象添加的

復制代碼 代碼如下:

Cache.Insert("MyData", Source, new CacheDependency(Server.MapPath("authors.xml")));

但是當我們想讓緩存根據(jù)數(shù)據(jù)庫中表的變化而失效并重建該緩存的時候,應該怎么做呢 – 這種情景在很多應用程序中都存在。Asp.net沒有為監(jiān)視數(shù)據(jù)庫表的變化提供內(nèi)在的直接緩存支持。利用SQL Server的不常用的系統(tǒng)存儲過程sp_makewebtask ,是可以達到這個目的的,這個存儲過程本來是用作從查詢中生成web頁面的,但是我們只要稍作修改- 在觸發(fā)器中使用它,我們就可以取得一個合理有效的途徑,當數(shù)據(jù)庫某張表的記錄被更新,刪除或者修改時來修改某個特定的文件,這樣會使在CacheDependency實例中的文件監(jiān)視進程偵測到文件的變化,從而使緩存失效。事實上,因為CacheDependency 類工作在UNC文件協(xié)議上,我們可以在整個Web Farm上部署這個解決方案,Web Farm上每臺機器上的應用程序副本都會通過UNC文件路徑來監(jiān)視WebFarm中某臺單個機器上的同一個文件

廢話少說,讓我們創(chuàng)建一個簡單的web應用程序,來演示它是如果工作的。首先,我們將會使用我們SQL Server中都信賴的Northwind范例數(shù)據(jù)庫。創(chuàng)建一個簡單的DataGrid來顯示Employees表中的記錄. 我們要做的第一件事情就是創(chuàng)建觸發(fā)器。

復制代碼 代碼如下:

CREATE TRIGGER WriteCacheDepFile ON [dbo].[Employees]
FOR INSERT, UPDATE, DELETE
AS
EXEC sp_makewebtask '\\peter\C$\Cache\mycache.txt', 'SELECT top 1 FirstName FROM employees'

以上存儲過程就是簡單的告訴SQL Server,如果Employee表發(fā)生任何變動,就根據(jù)一個簡單的查詢來更新”mycache.txt”文件,有這個簡單的查詢語句其實足夠了,只要它是一個有效的T-SQL語句,SQL Server會很樂意的去更新那個文件。

接下來,我們需要創(chuàng)建一個目錄,并設(shè)為共享。你可能要更新該文件的訪問權(quán)限,以使它可以被寫入,注意,我這里使用的是管理員共享”C$”.另外,你還需要創(chuàng)建一個空的文本文件,"mycache.txt".

好,現(xiàn)在可以創(chuàng)建我們的應用程序了。首先,在web.config文件中輸入依賴文件名稱,這樣做可以使我們在修改依賴文件的時候不需要重新部署應用程序。

在web.config文件的根部,添加appSettings配置節(jié):

復制代碼 代碼如下:

</system.web>
<appSettings>
<!—緩存依賴文件路徑 -->
<add key="dependencyFile" value="\\peter\Cache\mycache.txt" />
</appSettings>
</configuration>

現(xiàn)在,讓我們在Global類中建立緩存機制,這樣我們不需要在任何頁面中編寫特定的代碼

復制代碼 代碼如下:

public class Global : System.Web.HttpApplication
{
Cache _cache =null;
public static bool blnReflash = false;
public const string ConnStr = "server=localhost;database=Northwind;uid=sa;pwd=";
public const string strSQL = "SELECT EmployeeID, lastname, firstname FROM Employees";
protected void Application_Start(Object sender, EventArgs e)
{
_cache = Context.Cache;
RefreshCahe(null,null,0);
}
protected void Session_Start(Object sender, EventArgs e)
{
if(HttpContext.Current.Cache["Employees"]==null)
RefreshCache(null,null,0);
}
static void RefreshCache(string key,object item,CacheItemRemoveReason reason)
{
SqlDataAdapter adapter = new SqlDataAdapter(strSQL,ConnStr);
DataSet ds = new DataSet();
adapter.Fill(ds,"Employees");
CacheItemRemovedCallback onRemove = new CacheItemRemovedCallback(RefreshCache);
}

到此,關(guān)于“如何理解ASP.NET數(shù)據(jù)庫緩存依賴”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI