• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ASP.NET数据库缓存依赖实例分析

    本文实例讲述了ASP.NET数据库缓存依赖,分享给大家供大家参考。具体如下:

    一般在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, DELETE
    AS
    EXEC 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类中建立缓存机制,这样我们不需要在任何页面中编写特定的代码

    复制代码 代码如下:
    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);
    }

    希望本文所述对大家的asp.net程序设计有所帮助。

    您可能感兴趣的文章:
    • C#和asp.net中链接数据库中参数的几种传递方法实例代码
    • ASP.NET 链接 Access 数据库路径问题最终解决方案
    • ASP.NET oledb连接Access数据库的方法
    • ASP.NET连接sql2008数据库的实现代码
    • asp.net实现access数据库分页的方法
    • ASP.NET连接MySql数据库的2个方法及示例
    • asp.net得到本机数据库实例的两种方法代码
    • ASP.NET列出数据库活跃链接的方法
    上一篇:ASP.net处理XML数据实例浅析
    下一篇:ASP.net全局程序文件Global.asax用法分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    ASP.NET数据库缓存依赖实例分析 ASP.NET,数据库,缓存,依赖,