昨天整理了一下缓存的基本用法,和缓存依赖类 CacheDependency类的使用,今天整理一下缓存的数据库依赖类SqlCacheDependency

1、数据库依赖类SqlCacheDependency

数据库缓存依赖主要解决的是当数据库的内容发生改变时,如何及时通知缓存,并更新缓存中的数据的问题。

语法定义:

SqlCacheDependency类主要的构造函数如下:

public SqlCacheDependency(string database,string table)

其中参数一代表要启用缓存的数据库,参数二表示缓存的表。在实际使用过程中,只需要指明缓存的数据库和表即可。

方法是属性的应用(代码于CacheDependency类似),不过Sql需要先进行一下对web.config进行配置和设置数据库的缓存配置一下才可以使用SqlCacheDependency缓存类

第一步web.config配置如下:

 <!--连接数据库语句-->

<configuration>
<connectionStrings>
<add name="Config" connectionString="Data Source=.;Initial Catalog=CacheData;Persist Security Info=True;User ID=sa;Password=123" providerName="System.Data.SqlClient"/>
</connectionStrings> <!--在system.web节点下添加-->
<!--注意事项:配置中add name值为数据库名,connectionStringName为连接数据库字段的名称要相同--> <caching>
<sqlCacheDependency enabled="true" pollTime="1000"> <databases>
<add name="CacheData" connectionStringName="Config" pollTime="1000"/>
</databases>
</sqlCacheDependency> </caching>

 2、Vs缓存配置:

 打开“开始”|“所有程序”|“Microsoft Visual Studio 2010”|“Visual Studio Tools”|“Visual Studio 2010命名提示”菜单命令。

在命令框内输入:aspnet_regsql.exe -S  SqlServer服务器  -U <Username> -P <Password> -ed -d 数据库名称 -et -t 表名

若无身份验证输入:aspnet_regsql.exe -S  SqlServer服务器  -ed -d 数据库名称 -et -t 表名

执行命令即可;

3、页面代码;

 private static SqlCacheDependency MyDep;
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
if (!IsPostBack)
{
//Cache为数据库名,T_SqlCache为缓存表 DataSet ds = GetSet();
if (Cache["SqlCon"] == null)
{
//添加缓存SqlCon,缓存值为数据库表内容,
MyDep = new SqlCacheDependency("Cache", "T_SqlCache");
Cache.Add("SqlCon", ds, MyDep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null);
} }
} protected void Button1_Click(object sender, EventArgs e)
{
if (MyDep.HasChanged)
{//当数据库值更改时提醒;
Response.Write("数据库修改时间为:"+MyDep.UtcLastModified);
}
if (Cache["SqlCon"] == null)
{//当缓存过期或数据库值修改后缓存从新加载
MyDep = new SqlCacheDependency("Ajax", "T_AjaxLD");
DataSet ds = GetSet();
Cache.Add("SqlCon", ds, MyDep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null);
}
this.GridView1.DataSource = Cache["SqlCon"];//绑定数据
this.GridView1.DataBind();
}
/// <summary>
/// 生成Dataset
/// </summary>
/// <returns></returns>
private DataSet GetSet()
{
DataSet ds = new DataSet();
string sql = "select * from T_SqlCache";
string Config = ConfigurationManager.ConnectionStrings["Config"].ConnectionString;//连接数据库语句
using (SqlConnection cnn = new SqlConnection(Config))
{
using (SqlCommand cmm = new SqlCommand(sql, cnn))
{
SqlDataAdapter dapter = new SqlDataAdapter(cmm);
dapter.Fill(ds);
}
} return ds;
}

C#缓存基本内容就差不多这些,一些实践的应用等一会用到在总结出来,地下顺便转载一些session和Cache的区别:

 Session和Cache的区别

以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application。其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息。Session则保存对话信息。Application则是保存在整个应用程序范围内的信息,相当于全局变量。通常使用最频繁的是Session,那么Session和Cache又有什么区别呢?

本节结合使用经验,详细介绍Session缓存和Cache缓存的区别。

(1)最大的区别是Cache提供缓存依赖来更新数据,而Session只能依靠定义的缓存时间来判断缓存数据是否有效。

(2)即使应用程序终止,只要Cache.Add方法中定义的缓存时间未过期,下次开启应用程序时,缓存的数据依然存在。而Session缓存只是存在于一次会话中,会话结束后,数据也就失效了。

(3)Session容易丢失,导致数据的不确定性,而Cache不会出现这种情况。

(4)由于Session是每次会话就被加载,所以不适宜存放大量信息,否则会导致服务器的性能降低。而Cache则主要用来保存大容量信息,如数据库中的多个表。

(5)VS2005的测试版提供了将缓存保存在硬盘上的参数,但正式版中取消了这个功能,估计其在以后版本中会重新实现。而Session目前只能保存在内存中,对其性能有影响。

为了提高Cache的有效利用率,建议对于不经常改动的数据使用Cache。

  

C# 缓存学习总结的更多相关文章

  1. spring boot guava cache 缓存学习

    http://blog.csdn.net/hy245120020/article/details/78065676 ****************************************** ...

  2. TimesTen 应用层数据库缓存学习:4. 仅仅读缓存

    在运行本文样例前.首先先运行TimesTen 应用层数据库缓存学习:2. 环境准备中的操作. Read-only Cache Group的概念 仅仅读缓存组例如以下图: 仅仅读缓存组(Read-Onl ...

  3. Android缓存学习入门

    本文主要包括以下内容 利用LruCache实现内存缓存 利用DiskLruCache实现磁盘缓存 LruCache与DiskLruCache结合实例 利用了缓存机制的瀑布流实例 内存缓存的实现 pub ...

  4. memcache/redis 缓存学习笔记

    0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...

  5. C# 缓存学习第一天

    缓存应用目的:缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能 ...

  6. CPU缓存学习及C6678缓存使用总结(知识归纳)

    作者注: 1.本篇博客内容是本人在学习cpu缓存原理时进行的学习总结,参考了多处相关资源(书籍,视频,知乎回答等),参考出处标注在内容最后. 2.由于本篇内容的编辑工作在印象笔记完成,输出的PDF文件 ...

  7. mybatis缓存学习笔记

    mybatis有两级缓存机制,一级缓存默认开启,可以在手动关闭:二级缓存默认关闭,可以手动开启.一级缓存为线程内缓存,二级缓存为线程间缓存. 一提缓存,必是查询.缓存的作用就是查询快.写操作只能使得缓 ...

  8. android图片的异步加载和双缓存学习笔记——DisplayImageOptions (转)

    转的地址:http://hunankeda110.iteye.com/blog/1897961 1 //设置图片在下载期间显示的图片 2 showStubImage(R.drawable.ic_lau ...

  9. Android缓存学习入门(二)

    本文主要包括以下内容 内存缓存策略 文件缓存策略 内存缓存策略 当有一个图片要去从网络下载的时候,我们并不会直接去从网络下载,因为在这个时代,用户的流量是宝贵的,耗流量的应用是不会得到用户的青睐的.那 ...

  10. html状态码与缓存学习

    当浏览器访问一个页面时,浏览者的浏览器会向网页所在的服务器发送请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求. ...

随机推荐

  1. iis8 默认不支持svc解决方法

    最近在IIS8中发布WCF服务应用时,发现IIS8不支持WCF服务svc请求,后来发现IIS8缺少对WCF服务的Managed Handler,按照以下步骤添加后,IIS8即支持WCF服务. 1. 首 ...

  2. PHP 错误处理机制

    在日常的项目开发过程中,总是会出现一些我们意想不到的异常错误,如果我们对此没有进行相对完善的处理,那么程序看上去也很不专业,也很可能就会成为别人攻击系统的有效信息:有些错误异常会终止脚本执行,这个时候 ...

  3. Python_使用smtplib和email模块发送邮件

    [http://blog.csdn.net/menglei8625/article/details/7721746] SMTP (Simple Mail Transfer Protocol) 邮件传送 ...

  4. 转自:如何自学Android(强烈推荐)

    转自: http://gityuan.com/2016/04/24/how-to-study-android/ 看到很多人提问非科班该如何学习编程,其实科班也基本靠自学.有句话叫“师傅领进门修行靠个人 ...

  5. Could not load the "btn_020.disable.png" image referenced from a nib in the bundle with identifier "com.xxx.---0710"

    照此方法打开引用你这个图片的sb或者xib: 然后搜索你的这个图片名称: 删除这个图片名称的引用.如果还是不行的话,就删除此sb或xib文件然后重新创建.

  6. 移动端1px细线的处理

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 在Windows Server 2012 中安装 .NET 3.5 Framework,PowerShell 安装.NET FRAMEWORK

    问题 如今,仍然有许多程序和应用需要依靠.NET 3.5 framework 来运行.在Windows Server 2012中,微软提供了.NET 3.5 和.NET 4.5的安装选项以为你的应用程 ...

  8. cmd 命令收集

    window类   1.命令打开系统设置页面 1.control keymgr.dll 打开凭据管理器 2.gpedit.msc 打开管理面板 3.mspaint--------画图板  4.msts ...

  9. js 调用php代码

    <?php $test = "var a = ".$_GET['test'].";"; ?> <mce:script type="t ...

  10. python使用正则表达式文本替换

    2D客户端编程从某种意义上来讲就是素材组织,所以,图片素材组织经常需要批量处理,python一定是最佳选择,不管是win/linux/mac都有一个简单的运行环境 举两个应用场景: 如果不是在某个文件 ...