国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

ASP.NET 數(shù)據(jù)庫緩存依賴

2019-11-17 01:49:06
字體:
供稿:網(wǎng)友

asp.net 數(shù)據(jù)庫緩存依賴

By Peter A. Bromberg, Ph.D.

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

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

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

廢話少說,讓我們創(chuàng)建一個(gè)簡(jiǎn)單的web應(yīng)用程序,來演示它是如果工作的。首先,我們將會(huì)使用我們SQL Server中都信賴的Northwind范例數(shù)據(jù)庫。創(chuàng)建一個(gè)簡(jiǎn)單的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'

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

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

好,現(xiàn)在可以創(chuàng)建我們的應(yīng)用程序了。首先,在web.config文件中輸入依賴文件名稱,這樣做可以使我們?cè)谛薷囊蕾囄募臅r(shí)候不需要重新部署應(yīng)用程序。

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

</system.web>

<appSettings>

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

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

</appSettings>

</configuration>

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

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

}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南城县| 玉龙| 乐亭县| 黎城县| 鄂尔多斯市| 黎城县| 宝兴县| 隆安县| 博白县| 阳东县| 连州市| 遂昌县| 安新县| 杂多县| 长寿区| 亳州市| 黔西| 新安县| 启东市| 拉萨市| 琼海市| 乌什县| 武乡县| 辽宁省| 额济纳旗| 茌平县| 铁岭县| 罗城| 盐山县| 报价| 张家口市| 盘山县| 平塘县| 象州县| 五原县| 普宁市| 平武县| 岚皋县| 台江县| 广安市| 永安市|