明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

自動(dòng)更改Cache中的數(shù)據(jù)

[摘要]原理: 當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)更新時(shí),使用觸發(fā)器調(diào)用外部程序修改Cache依賴的文件,從而使Cache失效。當(dāng)頁(yè)面再次請(qǐng)求Cache時(shí),由于請(qǐng)求的Cache已經(jīng)失效,所以程序?qū)臄?shù)據(jù)庫(kù)取數(shù)據(jù),并更新Cache。 Sql Server 2000中的觸發(fā)觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,被定義為在對(duì)表或者視圖執(zhí)行...

原理:

當(dāng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)更新時(shí),使用觸發(fā)器調(diào)用外部程序修改Cache依賴的文件,從而使Cache失效。當(dāng)頁(yè)面再次請(qǐng)求Cache時(shí),由于請(qǐng)求的Cache已經(jīng)失效,所以程序?qū)臄?shù)據(jù)庫(kù)取數(shù)據(jù),并更新Cache。



Sql Server 2000中的觸發(fā)觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,被定義為在對(duì)表或者視圖執(zhí)行INSERT、UPDATE、DELETE操作時(shí)執(zhí)行。



Cache的Insert方法的一個(gè)重載版本

Public void Insert(string ,object , CacheDependency)

向Cache中插入具有文件依賴項(xiàng)或鍵依賴項(xiàng)的對(duì)象。[Visual Basic]當(dāng)任何依賴項(xiàng)更改時(shí),該對(duì)象即無(wú)效,并從緩存中移除。



代碼:



Sql Server觸發(fā)器:

CREATE TRIGGER BookList_Cache ON [dbo].[BookList]

FOR INSERT, UPDATE, DELETE

AS

Begin

DECLARE @CMDS [nvarchar](100)

--外部程序的路徑。BookList -– Cache依賴的文件名稱,以參數(shù)的形式傳遞給外部程序。

SET @CMDS = 'C:\Inetpub\wwwroot\TryXML\SqlDepend.exe ' + ' BookList'

Exec Master..xp_cmdshell @CMDS

End



SqlDepend代碼:

SqlDepend是一個(gè)控制臺(tái)應(yīng)用程序。



using System;

using System.IO;

using System.Xml;



namespace SqlDepend

{

///

/// Class1 的摘要說(shuō)明。

///

class Class1

{

///

/// 應(yīng)用程序的主入口點(diǎn)。

///

[STAThread]

static void Main(string[] args)

{

//

// TODO: 在此處添加代碼以啟動(dòng)應(yīng)用程序

//

//Cache依賴文件的具體路徑

string Path=@"C:\Inetpub\wwwroot\TryXML\Cache\";

//Cache依賴文件的名稱。

string _table = args[0].ToString();

Path = Path + _table + ".xml";

if(!File.Exists(Path))

{

File.Create(Path);

}

//產(chǎn)生一隨機(jī)數(shù),寫入依賴文件。

Random _r = new Random( unchecked ( ( int ) DateTime.Now.Ticks ) );

string _value = _r.Next().ToString();

StreamWriter _SWriter = new StreamWriter( File.Open( Path, FileMode.Open, FileAccess.Write ) );

_SWriter.Write( _value );

_SWriter.Close();

}

}

}



web文件:

if(Cache["InvalidataCache"] != null)

{

Response.Write("Cache is not Invalided!");

}

else

{

Response.Write("Cache had Invalided!");

Cache.Insert("InvalidataCache","Hello World!",

new CacheDependency(Server.MapPath(@"Cache\Booklist.xml")));

}