知识大全 ASP.NET应用中缓存Oracle数据[2]

Posted 数据库

篇首语:菜能吃,糠能吃,气不能吃;吃能让,穿能让,理不能让。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET应用中缓存Oracle数据[2]相关的知识,希望对你有一定的参考价值。

ASP.NET应用中缓存Oracle数据[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

ASP NET TierVB NET实现

 

我们设计了含一个回调方法的监听类来处理缓存项无效时的通知 这个回调方法RemovedCallback用一个代理(delegate)函数来注册 回调方法onRemove的声明必须与CacheItemRemovedCallback代理声明又相同的签名

 

  Dim onRemove As CacheItemRemovedCallback = Nothing

onRemove = New CacheItemRemovedCallback(AddressOf RemovedCallback)

 

监听事件处理方法RemovedCallback负责处理数据库触发器的通知 其定义如下 若缓存项失效 可用数据库方法调用 getRecordFromdatabase()从数据库取出数据 参数 key 指从缓存中删除的项的索引位置 参数 value 指从缓存中删除的数据对象 参数 CacheItemRemovedReason 指从缓存中删除数据项的原因

 

  PublicSub RemovedCallback(ByVal key AsString ByVal value AsObject ByVal reason As

  CacheItemRemovedReason)

  Dim Source As DataView

  Source = getRecordFromdatabase()

  Cache Insert( employeeTable Source New

  System Web Caching CacheDependency( d:\\download\\tblemployee txt )

  Cache NoAbsoluteExpiration Cache NoSlidingExpiration

  CacheItemPriority Normal onRemove)

EndSub

 

方法getRecordFromdatabase()负责查询数据库表Employee并返回一个DataView对象引用 它使用一个名为 getEmployee的存储过程来抽象从Employee表中取数据的SQL 这个方法有一个名为p_empid的参数 表示Employee的主键

 

  PublicFunction getRecordFromdatabase (ByVal p_empid As Int ) As DataView

  Dim con As OracleConnection = Nothing

  Dim cmd As OracleCommand = Nothing

  Dim ds As DataSet = Nothing

  Try

  con = getDatabaseConnection( UserId=scott;Password=tiger;Data Source=testingdb; )

  cmd = New OracleCommand( Administrator getEmployee con)

  cmd CommandType = CommandType StoredProcedure

  cmd Parameters Add(New OracleParameter( employeeId OracleDbType Int )) Value = p_empid

  Dim param AsNew OracleParameter( RC OracleDbType RefCursor)

  cmd Parameters Add(param) Direction = ParameterDirection Output

  Dim myCommand AsNew OracleDataAdapter(cmd)

  ds = New DataSet

  myCommand Fill(ds)

  Dim table As DataTable = ds Tables( )

  Dim index As Int = table Rows Count

  Return ds Tables( ) DefaultView

  Catch ex As Exception

  ThrowNew Exception( Exception in Database Tier Method getRecordFromdatabase () + ex Message ex)

  Finally

  Try

  cmd Dispose()

  Catch ex As Exception

  Finally

  cmd = Nothing

  EndTry

  Try

  con Close()

  Catch ex As Exception

  Finally

  con = Nothing

  EndTry

  EndTry

EndFunction

 

函数getDatabaseConnection接受一个连接字符串(connection stirng)为参数 返回一个OracleConnection对象引用

 

  PublicFunction getDatabaseConnection(ByVal strconnection as string) As OracleConnection

  Dim con As Oracle DataAccess Client OracleConnection = Nothing

  Try

  con = New Oracle DataAccess Client OracleConnection

  con ConnectionString = strconnection

  con Open()

  Return con

  Catch ex As Exception

  ThrowNew Exception( Exception in Database Tier Method getOracleConnection()

  + ex Message ex)

  EndTry

EndFunction

 

Oracle数据库Tier实现

 

定义Employee表上DML事件的触发器体如下 这个触发器简单的调用一个PL/SQL包裹函数来更新名为tblemployee txt的操作系统文件 文件副本在两台机器(机器和机器 )上更新 两台机器运行同一个Web应用的不同实例来均衡负载 这里administrator Oracle数据库的方案(schema)对象所有者

 

begin administrator plfile( machine \\\\download\\\\ tblemployee txt ); administrator plfile( machine \\\\download \\\\ tblemployee txt );end;

 

为更新缓存依赖文件 我们需要写一个C函数或Java存储过程 我们的例子中选择了Java存储过程 因为Oracle数据库服务器有一个内置的JVM 使得书写Java存储过程很方便 必须有足够的内存分配给Oracle实例的系统全局区(SGA)中的Java池 静态方法updateFile接受一个绝对路径作为参数 并在合适的目录中创建缓存依赖文件 若文件已经存在 则先删除然后创建

 

import java io *;public class UpdFile public static void updateFile(String filename)  try   File f = new File(filename);  f delete();  f createNewFile();  catch (IOException e)   // log exception ;

 

NPL/SQL包裹实现如下 包裹函数以文件名为参数 调用Java存储过程中updateFile方法

 

  (p_filename IN VARCHAR )

  AS LANGUAGE JAVA

NAME UpdFile updateFile (java lang String) ;

 

Web Farm部署中的Oracle数据缓存

 

正如我们讨论的例子中所示 Web服务器和机器构成了一个Web Farm来为我们的Web应用提供负载均衡 每台机器运行同一个Web应用的一个实例 在这个情况下 每个实例可以拥有自己的存放在Cache对象中的缓存数据副本 当Employee表改变 相应的数据库触发器更新两台机器上的文件 tblemployee txt 每个实例都指定一个到tblemployee txt的缓存依赖 Web Farm的两个实例都可以正确更新 使得两个实例上的数据缓存可以和数据库表Employee保持同步

 

结论

 

  数据缓存是优化Oracle数据库上 ASP NET应用的有效技巧 尽管ASP NET不允许设定缓存的数据库依赖 Oracle触发器协同Java存储过程可以扩展ASP NET缓存的威力从而允许Oracle数据库缓存 这个技巧也可以适用于Web Farm部署

[ ]  [ ]  

cha138/Article/program/net/201311/15139

相关参考

知识大全 ASP.NET应用中缓存Oracle数据[1]

ASP.NET应用中缓存Oracle数据[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为

知识大全 在asp.net 中实现维护数据缓存

在项目中我们经常会用到数据缓存也会在项目处理对缓存的维护但是有些时间我们需要人为的来维护这些缓存用下面的代码来实现   将缓存信息绑定到DataGrid上   privatevoidbindCache

知识大全 ASP.NET 数据库缓存依赖

ASP.NET数据库缓存依赖  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在ASPNET中Ca

知识大全 ASP.NET项目开发指南:数据缓存简介

ASP.NET项目开发指南:数据缓存简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &nbs

知识大全 ASP.NET怎么样缓存频繁更新的数据?

ASP.NET怎么样缓存频繁更新的数据?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近接手

知识大全 ASP.NET缓存概念及其应用浅析

ASP.NET缓存概念及其应用浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET缓

知识大全 asp.net 连接Oracle数据库

asp.net连接Oracle数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!代码如下&nbs

知识大全 ASP.NET中如何对页面输出缓存

ASP.NET中如何对页面输出缓存  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixinz

知识大全 ASP.NET中数据校验部分的封装与应用

ASP.NET中数据校验部分的封装与应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们的业

知识大全 ASP.NET缓存总结

ASP.NET缓存总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一缓存概念缓存的好处类型