概述

使用Cache高速缓存可以提高数据的读取速度,减少服务器与客户端之间的数据交互。因为Cache一经创建就会占用服务器上的资源,所以Cache并不是越多越好,一般用于数据较固定,使用较频繁的地方。

Cache类的简单使用方法

  1. 首先,我们需要引用命名空间System.Web.Caching;

  2. 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时,我们就可以直接从缓存中读取数据。

  1. 如果想要删除创建的缓存,可以通过Remove方法移除缓存项
Cache.Remove(ID.ToString());

Sql缓存依赖类:SqlCacheDependency类

我们在上面提到了通过设置缓存依赖项可以检测缓存内容是否已经过期,一旦过期就应该及时更新。在这里我们使用SqlCacheDependency类来检测数据库的数据是否更新。

首先我们先来进行一些设置

  1. 打开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在后面创建缓存依赖项的时候会使用到。

  1. 通过命令行启动数据库缓存依赖项

在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&quot" -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为数据库中表的名称

  1. 创建缓存依赖项

使用以下代码创建缓存依赖项

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设置缓存依赖项的更多相关文章

  1. PhotoShop中画圆角矩形最简单方法(图文并茂)!

    PhotoShop中画圆角矩形最简单方法(图文并茂)! 1. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHhubjUyMA==/font/5a6L5L ...

  2. 在jquery中应该使用prop方法来获取和设置checked属性,不应该使用attr。

    在jquery中应该使用prop方法来获取和设置checked属性,不应该使用attr. $("#checkAll").prop("checked", true ...

  3. 如何在 WPF 中获取所有已经显式赋过值的依赖项属性

    原文:如何在 WPF 中获取所有已经显式赋过值的依赖项属性 获取 WPF 的依赖项属性的值时,会依照优先级去各个级别获取.这样,无论你什么时候去获取依赖项属性,都至少是有一个有效值的.有什么方法可以获 ...

  4. [转]利用JitPack发布自己项目让别人可以在dependencies中compile的简单方法

    JitPack的地址为:https://jitpack.io/ 发布 登陆 jitpack 在编辑框中输入github的网址,完成后点击LookUp 使用 点击 Get it. 之后网页就会自动导航到 ...

  5. 学习Linux系统中命令的简单方法

    如果说如何快速学习.了解Linux的话,我的答案是学命令.背命令!为何呢?对于一名新手来说,去学习Linux的思想.了解Linux的架构.明白Linux中“一切皆文件”概念虽然说是没有错,是对的.但是 ...

  6. 【Java/Android性能优 6】Android 图片SD卡缓存 使用简单 支持预取 支持多种缓存算法 支持不同网络类型 支持序列化

    本文转自:http://www.trinea.cn/android/android-imagesdcardcache/ 本文主要介绍一个支持图片自动预取.支持多种缓存算法.支持数据保存和恢复的图片Sd ...

  7. Mybatis源码手记-从缓存体系看责任链派发模式与循环依赖企业级实践

    一.缓存总览 Mybatis在设计上处处都有用到的缓存,而且Mybatis的缓存体系设计上遵循单一职责.开闭原则.高度解耦.及其精巧,充分的将缓存分层,其独到之处可以套用到很多类似的业务上.这里将主要 ...

  8. 详解浏览器缓存机制与Apache设置缓存

    一.详解浏览器缓存机制 对于,如何说明缓存机制,在网络上找到了两张图,个人认为思路是比较清晰的.总结时,上图. 这里需要注意的有两点: 1.Last-Modified.Etag是响应头里的数据 2.I ...

  9. Ehcache(04)——设置缓存的大小

    http://haohaoxuexi.iteye.com/blog/2116749 设置缓存的大小 目录 1     CacheManager级别 2     Cache级别 3     大小衡量 4 ...

随机推荐

  1. HTTP协议中源端口和目标端口的问题

    [提问] How is source port for HTTP determined? Is there ever collision in NAT?   I know that when a HT ...

  2. [Algorithm] Check for balanced parentheses using stack

    Algorithm or program to check for balanced parentheses in an expression using stack data structure. ...

  3. 初探iOS网络开发,数据解析。

    通过大众点评平台开发来简单了解一下,oc的网络编程和数据解析(json) 首先我们需要到大大众点评开发者平台申请一个key.http://developer.dianping.com/app/tech ...

  4. WIN10系统如何关闭用户账户控制

    在底部搜索框中输入UAC,打开用户账户控制设置   更改为从不通知即可

  5. 带你走进EJB--将EJB发布为Webservice(3)

    在上面文章中我们讲到,通过使用用JBoss5作为EJB容器的时候,调用Web服务出现了异常. 异常信息如下: *********************** CreateWeb Service Cli ...

  6. 微软BI 之SSRS 系列 - 不显示 Pie Chart 饼图上 0% 的数据

    SSRS 小技巧系列专门用来记录 SSRS 报表开发过程中常用的小技巧 - 效果图 - 0% 的标签数据不需要显示出来. 效果图 - 正常的效果. 解决方法 - 使用 IIF 条件判断,如果计算值为 ...

  7. 使用Spring框架入门一:基于XML配置的IOC/DI的使用

    一.Spring框架 1.方法一:逐项导入基础依赖包: spring-core.spring-beans.spring-context.spring-expression 2.方法二:最简洁的导入,直 ...

  8. 使用MYSQL的INNODB实现任务分发机制

    最近公司有个项目,需要多并发完成任务,也就是一个任务控制中心控制多个WORKER的问题,这里的核心点在于如果WORKER_A正在执行1号任务,任务中心不能让WORKER_B重复执行1号任务,即WORK ...

  9. AndroidStudio 中查看获取MD5和SHA1值以及如何查看手机应用信息以及读取*.db数据库里面数据

    查看获取MD5和SHA1值具体操作方式链接 查看获取MD5和SHA1值实际操作命令CMD语句: C:\Users\Administrator>cd .android C:\Users\Admin ...

  10. LeetCode] binaryTreePaths

    class Solution { public: void binaryPath(TreeNode* root, vector<string>& result, string pa ...