日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET 数据库缓存依赖

發布時間:2023/11/29 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET 数据库缓存依赖 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

By Peter A. Bromberg, Ph.D.

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

?

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

?

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

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

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表發生任何變動,就根據一個簡單的查詢來更新”mycache.txt”文件,有這個簡單的查詢語句其實足夠了,只要它是一個有效的T-SQL語句,SQL Server會很樂意的去更新那個文件。

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

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

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

</system.web>

<appSettings>

<!—緩存依賴文件路徑 -->

<add key="dependencyFile" value="\\peter\Cache\mycache.txt" />

</appSettings>

</configuration>

?

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


[C#]

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);

}

轉載于:https://www.cnblogs.com/ranran/p/4036422.html

總結

以上是生活随笔為你收集整理的ASP.NET 数据库缓存依赖的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。