ASP.NET 2.0实现依赖Oracle的缓存策略

时间:2010-03-12 18:20:53  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:了方便,那些用Oracle数据库的ASP.NET程序员怎么办呢?        其实不用着急,因为ASP.NET 2.0中的缓存还提供了对文件依赖项的支持,也就是缓存依赖于某个文件,该文件被修改后,缓存中的页面就失效。只要巧妙利用ASP.NET 2.0的文件依赖项缓存策略和Oracle中的触发器,就可轻松实现依赖Oracle的缓存策略。思路很简单,先将页面的缓存策略设置为依赖某一...
  正文:ASP/ target=_blank class=infotextkey>asp.net 2.0中的缓存提供了对SQL依赖项的支持,也就是说当SQL Server数据库中的表或行中的数据被更改后,缓存中的页面就失效,否则,页面输出可一直保留在缓存当中。这确实为程序员提供了方便。但微软一向很小家子气,只为使用自家产品SQL SERVER的程序员提供了方便,那些用Oracle数据库的ASP.NET程序员怎么办呢?
  
    其实不用着急,因为ASP.NET 2.0中的缓存还提供了对文件依赖项的支持,也就是缓存依赖于某个文件,该文件被修改后,缓存中的页面就失效。只要巧妙利用ASP.NET 2.0的文件依赖项缓存策略和Oracle中的触发器,就可轻松实现依赖Oracle的缓存策略。思路很简单,先将页面的缓存策略设置为依赖某一个文件,再为Oracle中需要依赖的表添加一个触发器,当表中的数据被更改时,修改缓存所依赖的文件中的内容。
  
    下面以一个小例子来具体说明:
  
    试验目的:Default.aspx页面的缓存依赖于Oracle数据库中SCOTT用户的DEPT表,该表中数据被更改后,缓存中的页面失效。缓存的过期时间为120秒。
  
    一、设置网站页面的缓存依赖于文件TextFile.txt
  
    1、打开Visual Studio 2005,在E:CSharpCacheByOracleDependncy目录下新建一个Web项目,在其Default.aspx页面上添加一个Label控件,显示页面生成的时间,以判断刷新时页面是否为重新生成的,并设置页面缓存依赖于文件E:CSharpCacheByOracleDependncyTextFile.txt。
  
  protected void Page_Load(object sender, EventArgs e)
  {
   //显示当前时间,以便判断是否为缓存中页面
   this.Label1.Text = "CacheByOracleDependency:" + DateTime.Now.ToString();
   //缓存依赖于文件TextFile.txt
   string fileDependencyPath = Server.MapPath("TextFile.txt");
   Response.AddFileDependency(fileDependencyPath);
   // 设置缓存的过期时间为120秒。
   Response.Cache.SetExpires(DateTime.Now.AddSeconds(120));
   Response.Cache.SetCacheability(HttpCacheability.Public);
   Response.Cache.SetValidUntilExpires(true);
  }
  
    2、在E:CSharpCacheByOracleDependncy目录下新建一个TextFile.txt文件。
  
    二、在Oracle数据库中创建触发器
  
    1、触发器被触发时执行PL/SQL代码块。PL/SQL代码块直接读写操作系统中的文件,需调用内置的utl_file程序包。这需要先修改Oracle的初始化参数文件INIT.ORA,在其中添加参数utl_file_dir,来指定文件的目录。修改INIT.ORA文件后,需重启Oracle数据库,设置的参数才能生效。
  
    在INIT.ORA文件中添加下面一行内容:
  
    utl_file_dir='E:CSharpCacheByOracleDependncy'
  
    也可以设置为utl_file_dir=*,不指定具体目录,即任何目录都可以。
  
    如果是Oracle 9i数据库,还有一种方法也能起到同样的作用:在sys用户下创建一个directory目录(实际上是在sys用户下的dir$表中增加一个对应的OS_PATH),然后将对该directory对象的读/写操作的权限grant给public。
  
    create or replace directory FILEPATH as 'E:CSharpCacheByOracleDependncy';
  
    grant read on directory FILEPATH to public;
  
    这里我使用的是第二种方法。
  
    2、为所依赖的表(SCOTT用户的DEPT表)创建一个触发器:当DEPT表中的数据更改后,触发器就会将当前系统时间写入TextFile.txt文件中。
  
  CREATE OR REPLACE TRIGGER
  "SCOTT"."TEST_CACHE_BY_ORACLE_DEPENDNCY" AFTER
  INSERT
  OR UPDATE
  OR DELETE OF "DEPTNO", "DNAME", "LOC" ON "SCOTT"."DEPT" DECLARE
  file_handle utl_file.file_type;
  BEGIN
  --打开文件
  file_handle := utl_file.fopen('FILEPATH','TextFile.txt','w');

ASP.NET 2.0实现依赖Oracle的缓存策略》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13215.html


关键字:

关于《ASP.NET 2.0实现依赖Oracle的缓存策略》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td