zoukankan      html  css  js  c++  java
  • .net 数据库缓存依赖:【实例与解释】

    数据库缓存依赖应用了Cache类,看了这么多篇文章,当时都被忽悠住了,一直以为数据库修改过后,缓存数据也随之改变,希望新手不要这么人为,所谓数据库缓存依赖其实就是让应用程序中的缓存与数据库某表数据建立依赖关系,当数据库数据变化时通知给应用程序,并让应用程序中对应依赖的Cache数据失效(=null)。就是这么一个简单的过程,用户可以通过判断cache是否存在,如果不存在则重新加载数据项。简单的说就是一个数据变化通知的过程,并不会直接改变缓存数据。下面【第三步的】代码可能有错误,大致是这样的,具体没有调试,很简单,用户自我理解一下就可以了。

    提炼的精简方法如下:

    一. 修改 web.config 的<system.web>节:

    1.数据库连接字符串

    <connectionStrings>

    <add name="OAMisc_ConnectionString" connectionString="Database=SystemOA;server=66.116.111.112;User ID=sa;Password=sa;" providerName="System.Data.SqlClient"/>

    </connectionStrings>

    2.在<system.web>中添加如下配置信息,*注意:“name” 对应数据库名称;“connectionStringName” 对应连接字符串名称。

    <system.web>

    <caching>
    <sqlCacheDependency enabled="true" pollTime="6000">
    <databases>
    <add name="SystemOA_221_110911" connectionStringName="OAMisc_ConnectionString"/>
    </databases>
    </sqlCacheDependency>
    </caching>

    <system.web>

    二. 执行命令

    开始→运行→CMD→找到自己C\windows\.......的framework对应版本的目录(里面有个aspnet_regsql.exe文件),输入命令:

    aspnet_regsql -C "data source=66.116.111.112;initial catalog=SystemOA;user id=sa;password=sa" -ed -et -t "UserInfos"

    注释:“data source”:数据源IP地址,“initial catalog”:数据库名称 , “-t”:需要缓存依赖的表名

    三. 程序中使用依赖缓存

    示例:新建了一个页面,后台代码如下。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.Caching;

    public partial class _Default : System.Web.UI.Page
    {
    /// <summary>
    /// 获取当前应用程序指定Key的缓存对象值
    /// </summary>
    /// <param name="cacheKey">缓存的键</param>
    /// <returns>返回缓存对象的值</returns>
    public static object GetCache( string cacheKey )
    {
    Cache myCache = HttpRuntime.Cache;
    return myCache[ cacheKey ];
    }

    //添加缓存数据

    public static void AddCache( string cacheKey , object cacheValue , CacheDependency dep )
    {
    Cache myCache = HttpRuntime.Cache;
    myCache.Insert( cacheKey , cacheValue , dep , Cache.NoAbsoluteExpiration , Cache.NoSlidingExpiration , CacheItemPriority.Default , null );
    }

    // 页面处理

    protected void Page_Load(object sender, EventArgs e)
    {
    string cacheKey = "ke1";

    DateTime nowDate = DateTime.Now;
    object objModel = GetCache( cacheKey ); //先获取缓存中的数据
    if ( objModel==null ) //缓存失效,则重新加载缓存数据
    {
    nowDate = DateTime.Now; //以当前时间作为一个缓存失效的标记。

    System.Web.Caching.SqlCacheDependency sqlDep = new System.Web.Caching.SqlCacheDependency( "SystemOA" , "frame_config" );
    AddCache( "测试key" , "测试值" , sqlDep );

    }
    Label1.Text = nowDate.ToString( ); 
    }
    }

  • 相关阅读:
    《编写高质量代码Web前端开发修炼之道》(读书笔记) windrainpy
    jQuery琐碎笔记 windrainpy
    【记录】事件冒泡和事件捕获 windrainpy
    JS比较容易迷惑的几个地方 windrainpy
    【转】成为顶级程序员的唯一途径! windrainpy
    jquery键盘事件 windrainpy
    【转】IE绝对定位元素神秘消失或被遮挡的解决 windrainpy
    简单算法
    HTTP的状态
    css的兼容问题
  • 原文地址:https://www.cnblogs.com/yanpo/p/2398267.html
Copyright © 2011-2022 走看看