C#中缓存的简单方法及使用Sql设置缓存依赖项
概述
使用Cache高速缓存可以提高数据的读取速度,减少服务器与客户端之间的数据交互。因为Cache一经创建就会占用服务器上的资源,所以Cache并不是越多越好,一般用于数据较固定,使用较频繁的地方。
Cache类的简单使用方法
首先,我们需要引用命名空间System.Web.Caching;
Cache类的方法主要提供对缓存数据的编辑操作,如增、删、改等。
在这里我们主要介绍Cache类的Add方法用于将数据添加到Cache对象
Add方法主要包含以下7个参数下:
参数“key”代表缓存数据项的键值,必须是唯一的。
参数“value”代表缓存数据的内容,可以是任意类型。
参数“dependencies”表示缓存的依赖项,也就是此项的更改意味着缓存内容已经过期。如果没有依赖项,可将此值设置为NULL。
参数“absoluteExpiration”是日期型数据,表示缓存过期的时间,.NET 2.0提供的缓存在过期后是可以使用的,能使用多长时间,就看这个参数的设置。
参数“slidingExpiration”的类型表示一段时间间隔,表示缓存参数将在多长时间以后被删除,此参数与absoluteExpiration参数相关联。
参数“priority”表示撤销缓存的优先值,此参数的值取自枚举变量“CacheItemPriority”,优先级低的数据项将先被删除。此参数主要用在缓存退出对象时。
参数“onRemoveCallback”表示缓存删除数据对象时调用的事件,一般用做通知程序。
通过Add方法,我们可以像这样简单的创建一个Cache
Cache.Add(ID.ToString(), author, mydep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null);
当Cache[ID.ToString()]不为null时,我们就可以直接从缓存中读取数据。
- 如果想要删除创建的缓存,可以通过Remove方法移除缓存项
Cache.Remove(ID.ToString());
Sql缓存依赖类:SqlCacheDependency类
我们在上面提到了通过设置缓存依赖项可以检测缓存内容是否已经过期,一旦过期就应该及时更新。在这里我们使用SqlCacheDependency类来检测数据库的数据是否更新。
首先我们先来进行一些设置
- 打开Web.config配置文件,进行如下设置
<connectionStrings>
<add name="huxiu" connectionString="data source=(localdb)\v11.0;initial catalog=huxiu;integrated security=True;multipleactiveresultsets=True;" />
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="1000">
<databases>
<add name="huxiu" connectionStringName="huxiu" />
</databases>
</sqlCacheDependency>
</caching>
其中pollTime单位为毫秒,意思是每隔1秒检测下数据库,检测表是否有发生变化。connectionStringName应于上面connectionStrings中add name的名字相同。caching中的add name在后面创建缓存依赖项的时候会使用到。
- 通过命令行启动数据库缓存依赖项
在C:\Windows\Microsoft.NET\Framework\v4.0.30319 aspnet_regsql.exe 盘中找到aspnet_regsql.exe位于的目录,使用cmd命令行打开该目录
在该目录下输入
aspnet_regsql -C "data source=(localdb)\v11.0;initial catalog=huxiu;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"" -ed -et -t "dbo.Author"
其中-c后面为数据库连接字符串,-t后面为数据库中表的名称
然后,继续在该目录下输入如下代码
以下这步不知道和上面的设置有没有重复,如果出现VS中报错无法连接到SQL 数据库进行缓存依赖项轮询可以尝试继续进行以下设置,没有则可以跳过。
aspnet_regsql -S (localdb)\v11.0 -E -d dbname -ed
aspnet_regsql -S (localdb)\v11.0 -E -d dbname -t dbtable -et
其中dbname为数据库名称,dbtable为数据库中表的名称
- 创建缓存依赖项
使用以下代码创建缓存依赖项
SqlCacheDependency mydep = new SqlCacheDependency("huxiu","Author");
其中的两个参数分别为caching中的add name的名字和数据库中表的名字
通过以上的步骤,我们就可以实现当数据库被更改时通过SqlCacheDependency的HasChanged方法进行判断,从而对缓存数据进行更新。
Aspnet_regsql.exe命令行有如下选项:
以下只选取了比较常用的几个命令项,详细可参考这里
1.SQL连接选项
-E 使用当前登录用户的 Windows 凭据进行身份验证;
-S 指定正在运行 SQL Server 并且将安装或者已安装数据库的计算机的名称;
-U 要用来登录的 SQL Server 用户 ID。此选项还要求使用密码 (-P) 选项。如果要使用 Windows 凭据 (-E) 进行身份验证,则此选项不是必需的;
-P 要用来登录的 SQL Server 密码。此选项还要求使用用户 ID (-U) 选项。如果要使用 Windows 凭据 (-E) 进行身份验证,则此选项不是必需的
-C 指定要连接到正在运行 SQL Server 并且将安装或者已经安装数据库的计算机的连接字符串。如果您仅指定服务器 (-S) 和登录(-U 和 -P,或 -E)信 息,则此选项不是必需的
2.应用程序服务选项
-A 添加对一项或多项 ASP.NET 应用程序服务的支持。可以同时或单独指定服务标识符。下列标识符用于 ASP.NET 应用程序服务。
all -- 所有的服务,包括由服务共享的通用表和存储过
m -- 成员资格
r -- 角色管理器
p -- 配置文件
c -- Web 部件个性化设置
当然,对应的-R就是移除这些应用程序服务了。
3.SQL依赖缓存依赖项
-ed 为 SQL 缓存依赖项启用数据库
-dd 为 SQL 缓存依赖项禁用数据库
-et 为 SQL 缓存依赖项启用表。在参数字符串中还必须包括 -t 选项
-dt 为 SQL 缓存依赖项禁用表。在参数字符串中还必须包括 -t 选项
-t 指定要启用或禁用以便与 SQL 缓存依赖项一起使用的表名。此选项必须与 -et 或 -dt 选项一起使用
下面就是个具体的例子:
1.为已经建好的数据库名为NBAData创建成员资格提供程序服务(如果输入的数据库名称不存在或没写,则会创建一个新数据库或创建一个默认的aspnetdb数据库),这里,登陆为sqlserver身份验证,用的是Visual Studio 2008命令提示工具:
aspnet_regsql.exe -S localhost -U sa -P P@ssw0rd -d NBAData -A m
2.为数据库NBAData里的一张表Player启用缓存依赖,若数据库未启用缓存依赖,则先要输入命令-ed为数据库启用缓存依赖:
aspnet_regsql.exe -S localhost -U sa -P P@ssw0rd -d NBAData -ed -et -t Player
aspnet_regsql.exe -S localhost -E -ssadd -sstype c -d yourDbName
当缓存依赖添加成功后数据库中则会添加一张名为AspNet_SqlCacheTablesForChangeNotification的表,并且有一行记录存在。
C#中缓存的简单方法及使用Sql设置缓存依赖项的更多相关文章
- PhotoShop中画圆角矩形最简单方法(图文并茂)!
PhotoShop中画圆角矩形最简单方法(图文并茂)! 1. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHhubjUyMA==/font/5a6L5L ...
- 在jquery中应该使用prop方法来获取和设置checked属性,不应该使用attr。
在jquery中应该使用prop方法来获取和设置checked属性,不应该使用attr. $("#checkAll").prop("checked", true ...
- 如何在 WPF 中获取所有已经显式赋过值的依赖项属性
原文:如何在 WPF 中获取所有已经显式赋过值的依赖项属性 获取 WPF 的依赖项属性的值时,会依照优先级去各个级别获取.这样,无论你什么时候去获取依赖项属性,都至少是有一个有效值的.有什么方法可以获 ...
- [转]利用JitPack发布自己项目让别人可以在dependencies中compile的简单方法
JitPack的地址为:https://jitpack.io/ 发布 登陆 jitpack 在编辑框中输入github的网址,完成后点击LookUp 使用 点击 Get it. 之后网页就会自动导航到 ...
- 学习Linux系统中命令的简单方法
如果说如何快速学习.了解Linux的话,我的答案是学命令.背命令!为何呢?对于一名新手来说,去学习Linux的思想.了解Linux的架构.明白Linux中“一切皆文件”概念虽然说是没有错,是对的.但是 ...
- 【Java/Android性能优 6】Android 图片SD卡缓存 使用简单 支持预取 支持多种缓存算法 支持不同网络类型 支持序列化
本文转自:http://www.trinea.cn/android/android-imagesdcardcache/ 本文主要介绍一个支持图片自动预取.支持多种缓存算法.支持数据保存和恢复的图片Sd ...
- Mybatis源码手记-从缓存体系看责任链派发模式与循环依赖企业级实践
一.缓存总览 Mybatis在设计上处处都有用到的缓存,而且Mybatis的缓存体系设计上遵循单一职责.开闭原则.高度解耦.及其精巧,充分的将缓存分层,其独到之处可以套用到很多类似的业务上.这里将主要 ...
- 详解浏览器缓存机制与Apache设置缓存
一.详解浏览器缓存机制 对于,如何说明缓存机制,在网络上找到了两张图,个人认为思路是比较清晰的.总结时,上图. 这里需要注意的有两点: 1.Last-Modified.Etag是响应头里的数据 2.I ...
- Ehcache(04)——设置缓存的大小
http://haohaoxuexi.iteye.com/blog/2116749 设置缓存的大小 目录 1 CacheManager级别 2 Cache级别 3 大小衡量 4 ...
随机推荐
- Kernel Memory Layout on ARM Linux
这是内核自带的文档,讲解ARM芯片的内存是如何布局的!比较简单,对于初学者可以看一下!但要想深入理解Linux内存管理,建议还是找几本好书看看,如深入理解Linux虚拟内存,嵌入系统分析,Linux内 ...
- Softmax 函数的特点和作用是什么?
作者:张欣链接:https://www.zhihu.com/question/23765351/answer/98897364来源:知乎著作权归作者所有,转载请联系作者获得授权. softmax 回归 ...
- retrofit+RXjava二次封装
接入说明:项目中已集成RXjava,RXandroid.Retrofit,为避免包冲突,不须要再次接入. 就可以直接使用RXjava,Retrofit的所有api. github地址:https:// ...
- HTML常见元素及其属性总结
HTML视频看完了.视频非常短,主要讲述了有关HTML中经常使用的标记和元素属性的使用.这对理解web开发有非常大的帮助.之前做过的牛腩新闻公布系统中用到了非常短HTML元素,仅仅是跟着视频做,非常多 ...
- js递归遍历key
需求:根据Json对象,查找到某key所有值 var obj = { first: "1", second: { name: "abc", mykey: &qu ...
- [Jade] Piped text
Another way to add plain text to templates is to prefix a line with a pipe character (|). This metho ...
- GPUImage API文档之GPUImageInput协议
GPUImageInput协议主要包含一些输入需要渲染目标的操作. - (void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)t ...
- Elasticsearch之集群脑裂
https://www.cnblogs.com/zlslch/p/6477312.html
- Using LACP with a vSphere Distributed Switch 5.1
Using LACP with a vSphere Distributed Switch 5.1 by Chris Wahl on Oct 15th, 2012 | 6,347 views One o ...
- Microsoft® SQL Server® 2008 Express with Tools
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=22973