Asp.Net数据库缓存依赖

   2023-02-09 学习力0
核心提示:1.为数据库启用缓存依赖(您需要具有管理特权,或管理帐户和密码。)在"Visual Studio 命令提示(2010(这里我用的是2010版本的,可以使用VS2005)"运行aspnet_regsql(MSSQL 2000启用方式略有不同)aspnet_regsql.exe -S Excel-lang -U sa -P sa -ed -d TestDB -et -

1.为数据库启用缓存依赖(您需要具有管理特权,或管理帐户和密码。)

在"Visual Studio 命令提示(2010(这里我用的是2010版本的,可以使用VS2005)"运行aspnet_regsql

(MSSQL 2000启用方式略有不同)

aspnet_regsql.exe -S Excel-lang -U sa -P sa -ed -d TestDB -et -t UserInfo

或者

aspnet_regsql -C "data source=Excel-lang;initial catalog=TestDB;user id=sa;password=sa" -ed -et -t "UserInfos"

注:1.数据库服务器名称为 Excel-lang 2.用户和密码为 sa sa 3.数据库和表分别为 TestDB UserInfo
运行完成后会在数据库下面产生一张表AspNet_SqlCacheTablesForChangeNotification和一个触发器

2.检查数据库是否启用监听服务

Select DataBasePropertyex('TestDB','IsBrokerEnabled')

或者

SELECT is_broker_enabled FROM sys.databases WHERE name = 'TestDB'

(1为已启用,0为未启用)

如果没有启用

使用语句ALTER DATABASE TestDB SET ENABLE_BROKER;启用监听服务

如果启用失败或者很长时间一直在执行请执行一下语句

ALTER DATABASE TestDB SET NEW_BROKER WITH ROLLBACK IMMEDIATE;

ALTER DATABASE TestDB SET ENABLE_BROKER;

3.配置WebConfig

<configuration>
 <connectionStrings>节点下配置

<add name="TestDBConnectionString" connectionString="Data Source=EXCEL-LANG;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=sa" providerName="System.Data.SqlClient" />
  </connectionStrings>

 <system.web>   节点下配置

 <caching>
      <sqlCacheDependency enabled="true" pollTime="1000">
        <databases>
          <add name="TestDB" connectionStringName="TestDBConnectionString"/>
        </databases>
      </sqlCacheDependency>
    </caching>

各节点属性请参照MSDN相关文档

4.页面加载时执行以下代码,从数据库中获取数据并加入缓存中

        List<UserInfo> list = DataCache.GetCache("UserInfoCache") as List<UserInfo>;
        if (list == null)
        {
            System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency("TestDB", "UserInfo");
            list = userManger.GetUserLoginList();
            onMoveBack = new CacheItemRemovedCallback(RemovedCallback);
            DataCache.SetCache("UserInfoCache", list, dep, onMoveBack);
        }

5.申明缓存失效后所执行的函数

   CacheItemRemovedCallback onMoveBack;
    private void RemovedCallback(String k, Object v, CacheItemRemovedReason r)
    {
        onMoveBack = new CacheItemRemovedCallback(RemovedCallback);
        System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency("TestDB", "UserInfo");
        List<UserInfo> list = userManger.GetUserLoginList();//从数据库中获取数据
      DataCache.SetCache("UserInfoCache", list, dep,onMoveBack);
    }

6.DataCache类 

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.Caching;

public class DataCache
{
    /// <summary> 
    /// 获取当前应用程序指定CacheKey的Cache值 
    /// </summary> 
    /// <param name="CacheKey"></param> 
    /// <returns></returns> 
    public static object GetCache(string CacheKey)
    {
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        return objCache[CacheKey];
    }
    /// <summary> 
    /// 设置当前应用程序指定CacheKey的Cache值 
    /// </summary> 
    /// <param name="CacheKey"></param> 
    /// <param name="objObject"></param> 
    public static void SetCache(string CacheKey, object objObject)
    {
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        objCache.Insert(CacheKey, objObject);
    }
    /// <summary> 
    /// 设置已缓存依赖的方式缓存数据 
    /// </summary> 
    /// <param name="CacheKey">键值</param> 
    /// <param name="objObject">缓存对象</param> 
    /// <param name="dep">缓存依赖项</param> 
    /// <param name="onMoveCallBack">缓存项移除是触发的回调函数</param> 
    public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep, CacheItemRemovedCallback onMoveCallBack)
    {
        System.Web.Caching.Cache objCache = HttpRuntime.Cache;
        objCache.Insert(
        CacheKey,
        objObject,
        dep,
        System.Web.Caching.Cache.NoAbsoluteExpiration,//从不过期 
        System.Web.Caching.Cache.NoSlidingExpiration,//禁用可调过期 
        System.Web.Caching.CacheItemPriority.Default,
        onMoveCallBack
        );
    }
}

7.执行步骤为从数据库查询数据→加入缓存(同时设置过期策略以及过期回调函数)→过期时→执行过期回调函数

 RemovedCallback→重新查询数据并加入缓存.

缓存依赖是

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 使用WebClient自动填写并提交ASP.NET页面表单的源代码
    使用WebClient自动填写并提交ASP.NET页面表单的
    转自:http://www.cnblogs.com/anjou/archive/2007/03/07/667253.html 在.NET中通过程序填写和提交表单还是比较简单。比如,要提交一个如下图所示的登录表单:           填写和提交以上表单的代码如下:       // 要提交表单的URI字符串
    02-09
  • asp.net mvc多条件+分页查询解决方案
    


            
asp.net mvc多条件+分页查询解决方案
    asp.net mvc多条件+分页查询解决方案
    http://www.cnblogs.com/nickppa/p/3232535.html开发环境vs2010css:bootstrapjs:jquery    bootstrap paginator原先只是想做个mvc的分页,但是一般的数据展现都需要检索条件,而且是多个条件,所以就变成了MVC多条件+分页查询因为美工不是很好,所以用的是
    02-09
  • ASP.NET操作Cookies的问题(Bug or Not)
    以下存和取都是在不同的页面中,如果是在同一个页面也没必要用cookies了。 Test1: 给Cookies赋值: const string AAA="aaa"; Response.Cookies[AAA].Value = "111;222;333"; 取值: string value = Request.Cookies[AAA].Value; // value为111 Test2: 给Cooki
    02-09
  • Asp.Net Core 自定义验证属性
      很多时候,在模型上的验证需要自己定义一些特定于我们需求的验证属性。所以这一篇我们就来介绍一下怎么自定义验证属性。  我们来实现一个验证邮箱域名的自定义验证属性,当然,最重要的是需要定义一个继承自ValidationAttribute的类,然后在实现其IsVal
    02-09
  • Asp.Net 之 枚举类型的下拉列表绑定
    有这样一个学科枚举类型:/// 学科 /// /summary public enum Subject {None = 0,[Description("语文")]Chinese = 1,[Description("数学")]Mathematics = 2,[Description("英语")]English = 3,[Description("政治")]Politics = 4,[Description("物理&qu
    02-09
  • [ASP.NET笔记] 1.Web基础知识
         1:http协议:     2:web服务器:     3:静态网页的概念     4:动态网页的概念       http协议:http(hypertext transfer protocol) 即超文本传输协议,这个协议是在internet上进行信息传送的协议任何网页之间要相互沟通,必须要尊循
    02-09
  • ASP.NET邮件发送 .net 发送邮件
      今天做了个ASP.NET做发送邮件功能,发现QQ邮箱好奇怪,当你用QQ邮箱做服务器的时候什么邮件都发送不出去(QQ邮箱除外)。而且爆出这样的错误:"邮箱不可用。 服务器响应为: Error: content rejected.http://mail.qq.com/zh_CN/help/content/rejectedmail.ht
    02-09
  • 由ASP.NET Core根据路径下载文件异常引发的探究
    前言    最近在开发新的项目,使用的是ASP.NET Core6.0版本的框架。由于项目中存在文件下载功能,没有使用类似MinIO或OSS之类的分布式文件系统,而是下载本地文件,也就是根据本地文件路径进行下载。这其中遇到了一个问题,是关于如何提供文件路径的,通
    02-09
  • ASP.NET的运行原理与运行机制 ASP.NET的开发模式包括
    ASP.NET的运行原理与运行机制 ASP.NET的开发模
    在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用WebForms这种模仿Windows Form编程方式有了很大不同,不再有大量控件和控件生成的大量不够灵活的代码
    02-09
  • ASP.NET 后台接收前台POST过来的json数据方法
     ASP.NET前后台交互之JSON数据 https://www.cnblogs.com/ensleep/p/3319756.html
    02-09
点击排行