|  | 设为首页 加入收藏 联系我们 |

|  | 首 页 行业资讯 网站运营 网络编程 数 据 库 网页设计 网络安全 网站推广 平面设计 服 务 器 电子商务 |

| 站内搜索： 热门关键字： 淘特　CMS　门户　信息港　房产　汽车　旅游　分类信息　下载　JspCms 内容管理系统 报社采编 |

现在位置：首页> 网络编程

编辑推荐

热门点击
·ASP.NET应用中缓存Oracle数据
·关于Asp代码与页面的分离
·ASP.NET 2.0功能扩展:跨页提交
·ASP.NET网络编程中常用到的27个函..
·ASP.NET如何在窗体和窗体之间传送数..
·Asp.net中防止用户多次登录的方法
·ASP.NET程序安全的基础知识
·ASP.NET中Server对象的方法
·关于ASP.NET编程中的嵌套If语句
·.NET程序员应该知道些什么

图片推荐
·.NET程序员应该知道些什么

ASP.NET应用中缓存Oracle数据
作者： 日期：2010-03-31 出处： 点击:

为了创建可扩展、高性能的基于WEB的应用，ASP.NET提供一个称为数据缓存(Data Caching)的特性。数据缓存支持将频繁访问的数据对象可编程地存放在内存中。这一特性可扩展以广泛地提高查询Oracle数据库中数据的ASP.NET应用的性能。本文讲述一个策略，可用于采用Web Farm环境中的ASP.NET Web应用缓存Oracle数据库数据。这个技巧允许在内存中缓存频繁访问的Oracle数据库数据，而不是频繁访问数据库来取数据。这可以帮助避免到Oracle数据库服务器的不必要的远路。进一步的，文章提出了一个保持缓存数据以使其始终与Oracle数据同步的实现。 ASP.NET中的数据缓存 ASP.NET中的数据缓存由Cache类和System.Web.Caching命名空间中的CacheDependency类支持。Cache类提供向缓存插入和从中取出数据的方法。CacheDependency类允许为缓存中数据项的指定其依赖项。当我们用Insert和Add方法将项目加入缓存中，可以指定一个项目的过期(expiration)策略。我们可以用Insert方法的absoluteExpiration属性来定义缓存中一个项目的生命期。这个属性允许你指定相应数据项过期的准确时间。也可以使用slidingExpiration属性来指定项目过期的流逝时间(基于它被访问的时间)。一旦一个项目过期，它从缓存中被清除。除非它再次被加入缓存中，否则再试图访问，将返回一个空值。 设定缓存依赖 ASP.NET使我们可以基于一个外部文件、目录或另一个缓存项来定义一个缓存项的依赖，即所谓文件依赖与键依赖。若一个依赖项改变，缓存项自动失效并被从缓存中清除。当相应的数据源改变时，我们可以用这种方法来从缓存中删除项目。例如，若我们的应用从一个XML文件中取数据并显示在一个表格(grid)中，我们可以把文件中的数据存放到缓存中，并设定缓存依赖于那个XML文件。当XML文件被更新，数据项就从缓存中被清除出去。这一事件发生时，应用重新读入XML文件，最新的数据项副本被再一次插入缓存中。进一步的，回调事件处理器可被设定为一个监听者，当缓存项被删除时得到通知。这使得我们不需要反复轮询缓存来确定数据项是否已无效。 Oracle数据库上的ASP.NET缓存依赖 现在考虑这样一个情景：数据存放于Oracle数据库中，一个ASP.NET应用通过ADO.NET来访问。进一步，我们假设数据库表中的数据一般是静态的，并被这个Web应用频繁访问。表上的DML操作很少而对数据有很多Select。这种情况是数据缓存技术的理想应用。但不幸的是，ASP.NET并不允许设定一个缓存项依赖于存放在数据库表中的数据。进一步，现实世界中，基于Web的系统，Web服务器和Oracle数据库服务器总是会运行在不同的机器上，使得缓存无效操作更有挑战性。另外，多数基于Web的应用采用Web farms，同一个应用的实例在不同的Web服务器上跑以负载均衡。这种情况使得数据库缓存问题稍稍复杂一些。 为了进一步研究上述问题的解决方案，我们举一个Web应用的例子来说明如何实现。例子中，我们使用VB.NET实现的ASP.NET应用，通过Oracle Data Provider for .NET (ODP)来访问 Oracle 9i数据库。 这个例子使用Oracle数据库中一个名为Employee的表。我们为该表上insert, update, delete设定触发器。这些触发器调用一个封装了一个Java存储过程的PL/SQL函数。这个Java存储过程负责更新缓存依赖的文件。 ASP.NET Tier的VB.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的主键。

[1]

- 返回首页
- 打印本文
- 加入收藏
- 返回顶部
- 关闭窗口

相关文章 | 查看留言 发表评论
用 户： |
内 容： |
验证码： |

关于本站　|　免责声明　|　联系我们　|　版权隐私　|　友情链接　|　网站地图
联系电话：0531-88511191 | 客服QQ：6410861 | Email：totcms@163.com | ICP备：88888号 Copyright © TotCms.com All Rights Reserved. 济南淘网科技 版权所有