大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> ASP.NET 数据库缓存依赖

ASP.NET 数据库缓存依赖

时间: 2021-07-31 作者:daque

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, deleteasexec 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); string depfile= configurationsettings.appsettings["dependencyfile"].tostring(); httpcontext.current.cache.insert("employees",ds,new cachedependency(depfile), cache.noabsoluteexpiration,cache.noslidingexpiration, cacheitempriority.high,onremove); blnreflash = true; } }就像上头看到的一律,咱们设置了一个cache典型的_cache东西,在application_start本领中,咱们把暂时的cache范例赋给它,而后挪用refreshcache本领去弥补该东西。refreshcache本质上是一个静态的委派回调本领,它所做的即是大略的从empoyees表中博得一个dataset,而后创造cacheitemremovedcallback典型的委派onremove,使其指向refreshcache本领,如许当被监察和控制的文献变革时,也即是缓存作废时,就会挪用该委派,革新缓存中的数据。 结果咱们把dataset偕同onremove委派一道插入到缓存中,在session_start中,为了“保障“,我其余增添了一个确定来挪用refreshcache本领弥补缓存。 到这边,咱们运用步调就创造好了,在任何页面中都不妨考察到缓存的dataset。在webform1aspx中,我演练了怎样运用它。[c#]private void page_load(object sender, system.eventargs e){//保护缓存非空,即使为空,则弥补它 if(cache["employees"] == null) global.refreshcache(null,null, 0); cachestatus.text = "cache refreshed at "+ datetime.now.tolongtimestring(); else cachestatus.text = " dataset from cache "; dataset ds = (dataset)cache["employees"]; datagrid1.datasource= ds.tables[0]; datagrid1.databind();} 此刻,即使你乞求这个页面,它将会历次胜利的表露从从cache中博得的dataset,即使你维持欣赏器翻开,同声翻开sql server的查问领会器,采用northwind数据库,实行sql语句'update employees set lastname = 'davovlieu' where employeeid =1',革新表中的记载,而后从新乞求该页面,你将会看到缓存仍旧作废并革新。翻译按:对于鉴于数据库的缓存依附,gotdotnet上也有一个用dataset实行的(rob howard 实行) asp.net cache invalidation on database change,暂时在asp.net1.1本子没有特殊天然的处置计划,犯得着欣喜的是,随whidbey一道颁布的asp.net2.0,再有yuku,从数据层供给了一个不错的实行。让咱们刮目相待!

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.