SQL数据库缓存
来源:互联网 发布:守望先锋安卓数据查询 编辑:程序博客网 时间:2024/06/03 20:42
们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能。但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据就是老的数据,从而导致数据的不一致。那有没有办法做到,数据如果不变化,用户就一直从缓存中取数据,一旦数据变化,系统能自动更新缓存中的数据,从而让用户得到更好的用户体验。
答案是肯定的!.NET已经为我们提供了这样一种非常好的解决方法:SqlCacheDependency数据库缓存依赖。
实现步骤:
下面就让我们看一下如何实现数据库缓存依赖功能:
第一步: 修改web.config,让项目启用SqlCacheDependency 。
将下列代码加入web.config的<system.web>节:
<system.web> <!--配置缓存依赖--> <caching> <sqlCacheDependency enabled="true" pollTime="6000"> <databases> <add name="MyWebSite" connectionStringName="MyWebSiteConnectionString"/> </databases> </sqlCacheDependency> </caching>
<connectionStrings><span style="white-space:pre"></span><add name="MyWebSiteConnectionString" connectionString="Data Source=XP-201107030245\SQLEXPRESS;Initial Catalog=MyWebSite;Integrated Security=True" providerName="System.Data.SqlClient"/><span style="white-space:pre"></span></connectionStrings>注意:在<databases>节的<add name="MyWebSite" connectionStringName="MyWebSiteConnectionString"/>中的name属性值必须和第三步的Page_Load代码中System.Web.Caching.SqlCacheDependency("MyWebSite","ProductData"); 中的第一个参数(数据库名称)相一致。
第二步:执行下述命令,为 数据库启用缓存依赖。
如果要配置SqlCacheDependency,则需要以命令行的方式执行。
aspnet_regsql.exe工具位于Windows\\Microsoft.NET\\Framework\\[版本]文件夹中。
aspnet_regsql -C "Data Source=XP-201107030245\SQLEXPRESS;Initial Catalog=MyWebSite;Integrated Security=True" providerName="System.Data.SqlClient"/>" -ed -et -t "ProductData"
参数-C后面的字符串是连接字符串(请替换成自己所需要的值),
参数-t后面的字符串是数据表的名字。
运行结果如图所示:命令执行后,在指定的数据库中会多出一个AspNet_SqlCacheTablesForChangeNotification表.
第三步:在代码中使用缓存,并为其设置SqlCacheDependency依赖:
namespace WebDBCache{ public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string CacheKey = "cachetest"; object objModel = GetCache(CacheKey);//从缓存中获取 if (objModel == null)//缓存里没有 { objModel = GetData();//把当前时间进行缓存 if (objModel != null) { //依赖数据库codematic中的P_Product表变化 来更新缓存 System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency("MyWebSite", "ProductData"); SetCache(CacheKey, objModel, dep);//写入缓存 } } GV.DataSource = (DataSet)objModel; GV.DataBind(); } private DataSet GetData() { string conString = "Data Source=XP-201107030245\\SQLEXPRESS;Initial Catalog=MyWebSite;Integrated Security=True"; string strSQL = "SELECT * FROM ProductData"; SqlConnection myConnection = new SqlConnection(conString); DataSet ds = new DataSet(); myConnection.Open(); SqlDataAdapter adapter = new SqlDataAdapter(strSQL, myConnection); adapter.Fill(ds, "Product"); myConnection.Close(); return ds; } public static object GetCache(string CacheKey) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; return objCache[CacheKey]; } public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert( CacheKey, objObject, dep, System.Web.Caching.Cache.NoAbsoluteExpiration,//从不过期 System.Web.Caching.Cache.NoSlidingExpiration,//禁用可调过期 System.Web.Caching.CacheItemPriority.Default, null); } }}
- SQL数据库缓存依赖
- SQL数据库缓存
- 没有为 SQL 缓存通知启用数据库
- 没有为 SQL 缓存通知启用数据库
- 链接sql数据库以及Oracle 数据库和启动缓存以及停止缓存
- mysql数据库性能优化(包括SQL,表结构,索引,缓存)
- mysql数据库性能优化(包括SQL,表结构,索引,缓存)
- 没有为SQL缓存通知启用数据库"某某某" ,使用Sql缓存依赖前,先调用EnableTableForNotifications通知数据库SqlCacheDependencyAdmin.Enabl
- sql缓存
- 数据库缓存
- 数据库缓存
- 数据库缓存
- 数据库缓存
- 数据库缓存
- 数据库缓存
- 缓存数据库
- 数据库缓存
- 使用 SQL 缓存依赖项,数据库缓存依赖 (附实例)
- Android 找出微信聊天记录的缓存
- VS2008如何启动和调试多个项目
- 安全驾驶-感冒药 (三十)
- JAVA加密解密之Base64
- 如何编写高质量代码
- SQL数据库缓存
- WPF中给datagrid控件中dataTable添加新行,并选中设为当前行(源码加注释)
- 安全驾驶-携带拖车绳(三十一)
- Android5.0失效API统计及解决兼容的方法
- Dynamic Programming--Longest Common Subsequence
- 8086汇编 计算输入两个十进制数之和用16进制输出//输入两个十六进制数之和用10进制输出
- 【菜鸟学Java】9:使用dom4j解析jdbc.xml
- 安全驾驶-锁车门(三十二)
- InnoDB Log checkpointing 和 dirty Buffer pool page的关系