C# 缓存学习总结
昨天整理了一下缓存的基本用法,和缓存依赖类 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# 缓存学习总结的更多相关文章
- spring boot guava cache 缓存学习
http://blog.csdn.net/hy245120020/article/details/78065676 ****************************************** ...
- TimesTen 应用层数据库缓存学习:4. 仅仅读缓存
在运行本文样例前.首先先运行TimesTen 应用层数据库缓存学习:2. 环境准备中的操作. Read-only Cache Group的概念 仅仅读缓存组例如以下图: 仅仅读缓存组(Read-Onl ...
- Android缓存学习入门
本文主要包括以下内容 利用LruCache实现内存缓存 利用DiskLruCache实现磁盘缓存 LruCache与DiskLruCache结合实例 利用了缓存机制的瀑布流实例 内存缓存的实现 pub ...
- memcache/redis 缓存学习笔记
0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...
- C# 缓存学习第一天
缓存应用目的:缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能 ...
- CPU缓存学习及C6678缓存使用总结(知识归纳)
作者注: 1.本篇博客内容是本人在学习cpu缓存原理时进行的学习总结,参考了多处相关资源(书籍,视频,知乎回答等),参考出处标注在内容最后. 2.由于本篇内容的编辑工作在印象笔记完成,输出的PDF文件 ...
- mybatis缓存学习笔记
mybatis有两级缓存机制,一级缓存默认开启,可以在手动关闭:二级缓存默认关闭,可以手动开启.一级缓存为线程内缓存,二级缓存为线程间缓存. 一提缓存,必是查询.缓存的作用就是查询快.写操作只能使得缓 ...
- android图片的异步加载和双缓存学习笔记——DisplayImageOptions (转)
转的地址:http://hunankeda110.iteye.com/blog/1897961 1 //设置图片在下载期间显示的图片 2 showStubImage(R.drawable.ic_lau ...
- Android缓存学习入门(二)
本文主要包括以下内容 内存缓存策略 文件缓存策略 内存缓存策略 当有一个图片要去从网络下载的时候,我们并不会直接去从网络下载,因为在这个时代,用户的流量是宝贵的,耗流量的应用是不会得到用户的青睐的.那 ...
- html状态码与缓存学习
当浏览器访问一个页面时,浏览者的浏览器会向网页所在的服务器发送请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求. ...
随机推荐
- 【开源项目6】介绍MenuDrawer这个牛x的控件,实现左右出菜单,上下出菜单
现在很多应用都很潇洒的从左边屏幕手势一划出个左边的隐藏菜单,右边一划出个隐藏菜单,上边一划出个隐藏菜单,下边一划出个隐藏菜单.或者像android的API16左右的激活列表项的功能.很多人肯定都很着迷 ...
- jsp中调用getOutputStream()产生冲突
再用jsp进行图片的生成的时候,例如一些验证码,比例图的时候,在对图片进行输出调用 getOutputStream() 的时候会报该方法已经被调用的冲突. 例如如下的程序: <%@ page c ...
- iOS绘制手势解锁密码
手势解锁这个功能其实已经用的越来越少了.但是郁闷不知道我公司为什么每次做一个app都要把手势解锁加上.....于是就自己研究了一下手势解锁页面的实现.. 要想实现这个页面,先说说需要掌握哪些: UIP ...
- html行内元素和块元素标签分组
转载 address - 地址blockquote - 块引用center - 举中对齐块dir - 目录列表div - 常用块级容易,也是CSS layout的主要标签dl - 定义列表fields ...
- 写多个物件css3循环动画案例原理
div { background-color: #67CF22; height: 100%; width: 6px; display: inline-block; -webkit-animation: ...
- 剑指Offer42 左旋字符串
/************************************************************************* > File Name: 42_LeftRo ...
- 转: android apk 防止反编译技术(1~5连载)
转: android apk 防止反编译技术 做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习. ...
- 【CSS3】---文本阴影text-shadow
text-shadow可以用来设置文本的阴影效果. 语法: text-shadow: X-Offset Y-Offset blur color; X-Offset:表示阴影的水平偏移距离,其值为正值时 ...
- Oracle 日期查询
转自:http://hi.baidu.com/fengboy_7334/blog/item/b0aa60035f36a1e809fa935d.html 例如:select * from c where ...
- sql修改字段长度
语法: alter table <表名> alter column <字段名> 新类型名(长度) 示例:假如有名T1,字段名F1,原来F1为varchar(3),现在要改为va ...