利用MSSQL对不经常使用的表进行依赖缓存
缓存是我们开发应用系统的一把利刃,如果用的不好,会导致数据不准确等一系列问题。
所以在如何选择缓存的时候,我们要慎之又慎。所以在对系统中一些 不经常变化的表,我们可以采用SqlCacheDenpendency进行帮我进行缓存
只要在数据库中的数据不更新,那么数据永远在缓存。
但要实现sql 依赖缓存,需要数据库服务器支持。所以我们前期得进行数据库配置:
1.启用 Service Broker。可以通过下边语句查看是否启用。
select DatabasePropertyex('Northwind','IsBrokerEnabled')
--返回1表示true,返加0表示false
use master
Alter Database Northwind set enable_broker
切记,如果半天不执行,立马重启数据库服务器,重启好 立马执行就可以了。
2. 给您的数据库访问帐号授予权限(对不起,不支持sa)
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO User(自己建立的帐号)
好了,配置数据库就这么多动作。
剩下就是贴代码了:
1.webconfig 配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="">
<databases>
<add name="Northwind" connectionStringName="SQL2000"/>
</databases>
</sqlCacheDependency>
</caching>
</system.web>
</configuration>
2.程序执行代码:
namespace StudySqlDenpendency {
internal class Program {
private static void Main(string[] args) {
//
SleepGetCache();
//SqlDependency.Stop("server=10.1.0.103;database=DHCustomerPotal;uid=customerUser;pwd=123"); //开启依赖缓存
Console.ReadKey();
}
public static object GetCache(string KeyName) {
string CacheKey = KeyName;
var objCache = HttpRuntime.Cache;
var objModel = objCache[CacheKey];
if (objModel != null) {
Console.WriteLine("已经取到缓存!");
return objModel;
} else {
SqlDependency.Start("server=10.1.0.103;database=DHCustomerPotal;uid=customerUser;pwd=123"); //开启依赖缓存
using (SqlConnection cn = new SqlConnection("server=10.1.0.103;database=DHCustomerPotal;uid=customerUser;pwd=123")) {
using (SqlCommand cmd = cn.CreateCommand()) {
cn.Open();
cmd.CommandText = "select fid from dbo.T_PDM_ProductInfo";
SqlCacheDependency dep = new SqlCacheDependency(cmd);
DataTable dt = new DataTable();
using (SqlDataAdapter adapter = new SqlDataAdapter()) //查询数据
{
adapter.SelectCommand = cmd;
adapter.Fill(dt);
}
//SqlDependency dep=new SqlDependency(cmd);
objCache.Insert(CacheKey, dt, dep);
objModel = objCache[CacheKey];
return objModel;
}
}
}
}
public static void start() {
Stopwatch st = new Stopwatch();
st.Start();
var dts = GetCache("testKeyId") as DataTable;
if (dts != null) {
Console.WriteLine("读取的数据总数为:{0}", dts.Rows.Count.ToString());
}
st.Stop();
Console.WriteLine("依赖缓存时间秒:{0}", st.ElapsedMilliseconds.ToString());
}
public static void SleepGetCache() {
while (true) {
ThreadStart threadStart = new ThreadStart(start);
Thread myThread = new Thread(threadStart);
myThread.Start();
Thread.Sleep(); //10秒一读取
}
}
}
}
好了,到此为止,大家可以测试下,删除数据会不会有变化
利用MSSQL对不经常使用的表进行依赖缓存的更多相关文章
- [置顶] LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句
LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句 declare @sql varchar(4000), @dirpath varch ...
- MSSQL·备份数据库中的单表
阅文时长 | 0.11分钟 字数统计 | 237.6字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·备份数据库中的单表』 编写人 | SCscHero 编写时间 | 20 ...
- MySQL 利用frm文件和ibd文件恢复表结构和表数据
文章目录 frm文件和ibd文件简介 frm文件恢复表结构 ibd文件恢复表数据 通过脚本利用ibd文件恢复数据 通过shell脚本导出mysql所有库的所有表的表结构 frm文件和ibd文件简介 在 ...
- [转载]详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
[转载]详解网络传输中的三张表,MAC地址表.ARP缓存表以及路由表 虽然学过了计算机网络,但是这部分还是有点乱.正好在网上看到了一篇文章,讲的很透彻,转载过来康康. 本文出自 "邓奇的Bl ...
- Oracle缓存表与Oracle缓存的区别
一.Oracle缓存表 与 Oracle缓存 的概念 Oracle 缓存:是把Oracle近期查询的语句放置在Oracle设定的缓存当中. Oracle 缓存表:是把某个表放置在缓存当中,缓存是Ora ...
- 利用MSSQL getshell
此次复现使用的sql server 2000 和sql server 2008两个环境进行的 是在已知数据库密码的基础上进行的 0x01 MSSQL连接 连接MSSQL 2000 新建连接: 填写目的 ...
- 利用SQL语句查询数据库中所有表
Oracle: SELECT * FROM ALL_TABLES;系统里有权限的表 SELECT * FROM DBA_TABLES; 系统表 SELECT * FROM USER_TABLES; 当 ...
- 利用mybatis generator实现数据库之间的表同步
项目背景: 项目需要对两个服务器上的表进行同步,表的结构可能不一样.比如服务器A上的表i同步数据到服务器B上的表j,i和j的结构可能不一样,当然大部分字段是一样的.项目看起来很简单,网上一搜也是很多, ...
- 【MSSQL】SqlServer中delete语句表别名的问题
1.一般情况下删除表数据的sql语句: delete from products 2.如果想给表起个别名再删除呢,就得像下面这样写了 delete products from products as ...
随机推荐
- bazel-编译静态库
demo3 使用bazel编译静态库 demo3目录树 ├── README.md ├── static │ ├── BUILD │ ├── static.c │ └── static.h └── W ...
- ASP.NET MVC4企业级实战目录
http://www.cnblogs.com/jiekzou/p/5625762.html#!comments ******************************************** ...
- 带limit的hivesql排序
带limit的hivesql排序 select requestdomain,count(1) as cnt from ods_cndns_real_log where dt = 20160707 ...
- python 集合比较(交集、并集,差集)集合方法大全
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和 ...
- xcode常见报错调试
转载来自于:http://www.cnblogs.com/g-ios/p/4625912.html(广_ios博客园) BMKGeoCodeSearch 反向地理编码一直失败 Location 申请的 ...
- [转]关闭word进程
命名空间 :System.Diagnostics 以前在word的时候,经常碰到word进程产生一大堆,怕关错了,把用户自己打开的word也关闭,一直搞忽悠,今天上网花了10块钱,下了个文件,给我了一 ...
- Winform 加密连接字符串“未能提供RsaProtectedConfigurationProvider加密,对象已存在”的解决方案
当一台机器已安装软件,并有新用户需要使用此软件时提示“未能提供RsaProtectedConfigurationProvider加密,对象已存在”. 这是因为加密模式是用户模式,需要运行以下脚本添加新 ...
- Hive UDF IP解析(一):依赖包兼容性问题
Java依赖环境: <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-e ...
- /usr/include/glib-2.0/glib/gtypes.h:34:24: fatal error: glibconfig.h: No such file or directory
cc -DDEBUG -mtune=core2 -O2 \ -onvideo nvideo.c \ -I/usr/include/atk-1.0 \ -I/usr/include/cairo \ -I ...
- AI,DM,ML,PR的区别与联系
数据挖掘和机器学习的区别和联系,周志华有一篇很好的论述<机器学习与数据挖掘>可以帮助大家理解.数据挖掘受到很多学科领域的影响,其中数据库.机器学习.统计学无疑影响最大.简言之,对数据挖掘而 ...