概述

使用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. 解决THINKCMF后台文章的相册图集只能上传一个图片的问题

    遇到的问题: 最近使用了THINKCMF给客户开发了一个企业网站,客户在使用了一段时间后打电话说后台文章编辑页面有问题 经过沟通过知道,在后台文章编辑和添加页面相册图集每次只能上传一张图片   在跟客 ...

  2. Linux echo 显示内容颜色

    Linux echo 显示内容颜色 https://www.cnblogs.com/kimbo/p/6816566.html #字体颜色:30m-37m 黑.红.绿.黄.蓝.紫.青.白 str=&qu ...

  3. vscode关闭后未打开上次界面的解决办法

    1.更新vscode至最新版,当前时间2017-06-20,vs最新版1.13.1 2.关闭vscode的正确方式,不是点击左上角的叉叉,而是CMD+Q或者在Dock右键退出 3.这样,你在下次打开v ...

  4. thrift系列 - 快速入门

    1.简介           Thrift是当前流行的RPC框架之一,它有强大的代码生成引擎,可以跨语言,轻松解决程序间的通信问题. 本文旨在帮助大家快速入门,若想深入原理,请参见thrift官网:h ...

  5. java parse 带英文单词的日期字符串 转 date (转化新浪微博api返回的时间)

    拂晓风起 专注前端技术cocos2d.js.flash.html5,联系:kenkofox@qq.com.如果读者要找腾讯工作机会,请不吝推荐简历. 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔 ...

  6. PHPUnit单元测试

    单元测试 PHPUnit <?php /** * 定义一个用来被测试的类RemoteConnect * @author json * */ class RemoteConnect{ public ...

  7. Android:安装时提示:INSTALL_FAILED_INSUFFICIENT_STORAGE

    在将程序发布到手机上时提示该错误: INSTALL_FAILED_INSUFFICIENT_STORAGE 解决方法: 1. adb shell 2. #df # df df Filesystem   ...

  8. 使用Selenium+PhantomJS实现网页内容加载(包括网页后期Ajax出来的结果)

    一.需求 需要Nuget下面的库: 二.代码 class Program { static void Main(string[] args) { TestPhantomJsDriver(); } pr ...

  9. 获取ul下li标签里点击的是哪一个li并获取li里a标签的值

    $("ul li").click(function(){ //获取当天月份 ).text(); ,) alert(month); }); <!doctype html> ...

  10. vue 去掉元素之间空格 preserveWhitespace

    preserveWhitespace 说明参考:https://vue-loader.vuejs.org/zh/options.html#compiler options: { compilerOpt ...