缓存是我们开发应用系统的一把利刃,如果用的不好,会导致数据不准确等一系列问题。

所以在如何选择缓存的时候,我们要慎之又慎。所以在对系统中一些 不经常变化的表,我们可以采用SqlCacheDenpendency进行帮我进行缓存

只要在数据库中的数据不更新,那么数据永远在缓存。

但要实现sql 依赖缓存,需要数据库服务器支持。所以我们前期得进行数据库配置:

1.启用 Service Broker。可以通过下边语句查看是否启用。

  1. select DatabasePropertyex('Northwind','IsBrokerEnabled')
  2. --返回1表示true,返加0表示false
  1. use master
  2. Alter Database Northwind set enable_broker

切记,如果半天不执行,立马重启数据库服务器,重启好 立马执行就可以了。
2. 给您的数据库访问帐号授予权限(对不起,不支持sa)

  1. GRANT SUBSCRIBE QUERY NOTIFICATIONS TO User(自己建立的帐号)

好了,配置数据库就这么多动作。

剩下就是贴代码了:

1.webconfig 配置:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3. <startup>
  4. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  5. </startup>
  6. <system.web>
  7. <caching>
  8. <sqlCacheDependency enabled="true" pollTime="">
  9. <databases>
  10. <add name="Northwind" connectionStringName="SQL2000"/>
  11. </databases>
  12. </sqlCacheDependency>
  13. </caching>
  14. </system.web>
  15. </configuration>

2.程序执行代码:

  1. namespace StudySqlDenpendency {
  2. internal class Program {
  3. private static void Main(string[] args) {
  4. //
  5. SleepGetCache();
  6. //SqlDependency.Stop("server=10.1.0.103;database=DHCustomerPotal;uid=customerUser;pwd=123"); //开启依赖缓存
  7. Console.ReadKey();
  8.  
  9. }
  10.  
  11. public static object GetCache(string KeyName) {
  12. string CacheKey = KeyName;
  13. var objCache = HttpRuntime.Cache;
  14. var objModel = objCache[CacheKey];
  15. if (objModel != null) {
  16. Console.WriteLine("已经取到缓存!");
  17. return objModel;
  18. } else {
  19. SqlDependency.Start("server=10.1.0.103;database=DHCustomerPotal;uid=customerUser;pwd=123"); //开启依赖缓存
  20. using (SqlConnection cn = new SqlConnection("server=10.1.0.103;database=DHCustomerPotal;uid=customerUser;pwd=123")) {
  21. using (SqlCommand cmd = cn.CreateCommand()) {
  22. cn.Open();
  23. cmd.CommandText = "select fid from dbo.T_PDM_ProductInfo";
  24. SqlCacheDependency dep = new SqlCacheDependency(cmd);
  25. DataTable dt = new DataTable();
  26. using (SqlDataAdapter adapter = new SqlDataAdapter()) //查询数据
  27. {
  28. adapter.SelectCommand = cmd;
  29. adapter.Fill(dt);
  30. }
  31.  
  32. //SqlDependency dep=new SqlDependency(cmd);
  33. objCache.Insert(CacheKey, dt, dep);
  34. objModel = objCache[CacheKey];
  35. return objModel;
  36. }
  37. }
  38.  
  39. }
  40.  
  41. }
  42.  
  43. public static void start() {
  44. Stopwatch st = new Stopwatch();
  45. st.Start();
  46. var dts = GetCache("testKeyId") as DataTable;
  47. if (dts != null) {
  48. Console.WriteLine("读取的数据总数为:{0}", dts.Rows.Count.ToString());
  49. }
  50. st.Stop();
  51. Console.WriteLine("依赖缓存时间秒:{0}", st.ElapsedMilliseconds.ToString());
  52. }
  53.  
  54. public static void SleepGetCache() {
  55. while (true) {
  56. ThreadStart threadStart = new ThreadStart(start);
  57. Thread myThread = new Thread(threadStart);
  58. myThread.Start();
  59. Thread.Sleep(); //10秒一读取
  60. }
  61.  
  62. }
  63. }
  64.  
  65. }

好了,到此为止,大家可以测试下,删除数据会不会有变化

利用MSSQL对不经常使用的表进行依赖缓存的更多相关文章

  1. [置顶] LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句

    LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句 declare @sql varchar(4000), @dirpath varch ...

  2. MSSQL·备份数据库中的单表

    阅文时长 | 0.11分钟 字数统计 | 237.6字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·备份数据库中的单表』 编写人 | SCscHero 编写时间 | 20 ...

  3. MySQL 利用frm文件和ibd文件恢复表结构和表数据

    文章目录 frm文件和ibd文件简介 frm文件恢复表结构 ibd文件恢复表数据 通过脚本利用ibd文件恢复数据 通过shell脚本导出mysql所有库的所有表的表结构 frm文件和ibd文件简介 在 ...

  4. [转载]详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表

    [转载]详解网络传输中的三张表,MAC地址表.ARP缓存表以及路由表 虽然学过了计算机网络,但是这部分还是有点乱.正好在网上看到了一篇文章,讲的很透彻,转载过来康康. 本文出自 "邓奇的Bl ...

  5. Oracle缓存表与Oracle缓存的区别

    一.Oracle缓存表 与 Oracle缓存 的概念 Oracle 缓存:是把Oracle近期查询的语句放置在Oracle设定的缓存当中. Oracle 缓存表:是把某个表放置在缓存当中,缓存是Ora ...

  6. 利用MSSQL getshell

    此次复现使用的sql server 2000 和sql server 2008两个环境进行的 是在已知数据库密码的基础上进行的 0x01 MSSQL连接 连接MSSQL 2000 新建连接: 填写目的 ...

  7. 利用SQL语句查询数据库中所有表

    Oracle: SELECT * FROM ALL_TABLES;系统里有权限的表 SELECT * FROM DBA_TABLES; 系统表 SELECT * FROM USER_TABLES; 当 ...

  8. 利用mybatis generator实现数据库之间的表同步

    项目背景: 项目需要对两个服务器上的表进行同步,表的结构可能不一样.比如服务器A上的表i同步数据到服务器B上的表j,i和j的结构可能不一样,当然大部分字段是一样的.项目看起来很简单,网上一搜也是很多, ...

  9. 【MSSQL】SqlServer中delete语句表别名的问题

    1.一般情况下删除表数据的sql语句: delete from products 2.如果想给表起个别名再删除呢,就得像下面这样写了 delete products from products as ...

随机推荐

  1. Linux 监控分析

    一.硬件基础 Cpu   逻辑的处理.计算.判断 现代分时多任务操作系统对 CPU 都是分时间片使用的:比如A进程占用10ms,然后B进程占用30ms,然后空闲60ms, 再又是A进程占10ms,B进 ...

  2. bazel-编译静态库

    demo3 使用bazel编译静态库 demo3目录树 ├── README.md ├── static │ ├── BUILD │ ├── static.c │ └── static.h └── W ...

  3. tornado日志使用详解

    1.需求 将http访问记录,程序自定义日志输出到文件,按天分割,保留最近30天的日志. 2.使用示例 init_logging("%s/QYK.%s.%s.log" % (log ...

  4. Python 2.7.9 Demo - 014.列表List的定义、取值、遍历

    #coding=utf-8 #!/usr/bin/python list = ['a', 1, 'b', 2, 'c', 3]; print list[0]; print list[1:3]; pri ...

  5. Oracle PLSQL Demo - 12.定义包体[Define PACKAGE BODY]

    CREATE OR REPLACE PACKAGE BODY temp_package_demo is FUNCTION f_demo(userid NUMBER) RETURN BOOLEAN IS ...

  6. nrm 的使用

    我们介绍过cnpmjs.org和淘宝 npm 两个 NPM 镜像.除此之外,还有一些国外的 NPM 镜像.不同地区访问不同的镜像速度可能有差异,因此有时候需要切换 NPM 镜像.相比每次切换时都手动指 ...

  7. Ubuntu 12.04下mysql的安装与配置

    转自:http://blog.csdn.net/ichsonx/article/details/9285935 准备  0. 获取 mysql-5.5.15-linux2.6-i686.tar.gz ...

  8. LeetCode 新题: Find Minimum in Rotated Sorted Array 解题报告-二分法模板解法

    Find Minimum in Rotated Sorted Array Question Solution Suppose a sorted array is rotated at some piv ...

  9. redis未授权

    redis描述: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工 ...

  10. jacky自问自答-数据库

    1.exists和in有什么区别? EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False,而In子查询则是返回具体的数据值,与指定的字段比较 ...