sqlCacheDependency 使用
配置文件:
<configuration> <connectionStrings> <add name="SqlCacheConn" connectionString="Server=192.168.1.5;Packet Size=32768;Database=test;uid=sa;password=123456;max pool size=512; Integrated Security=false;" providerName="System.Data.SqlClient"/> </connectionStrings> <system.web> <caching> <sqlCacheDependency enabled="true" pollTime="10000"> <databases> <add name="SqlCache" connectionStringName="SqlCacheConn"/> </databases> </sqlCacheDependency> </caching> </system.web> </configuration>
启用消息通知:
//用命令启用SQL缓存通知 C:\Windows\Microsoft.NET\Framework\v4.0.30319
aspnet_regsql.exe -S localhost -U sa -P password -ed -d 数据库名字 -et -t 表名
启用后数据库相应的变化:
AspNet_SqlCachePollingStoredProcedure AspNet_SqlCacheQueryRegisteredTablesStoredProcedure AspNet_SqlCacheRegisterTableStoredProcedure AspNet_SqlCacheUnRegisterTableStoredProcedure AspNet_SqlCacheUpdateChangeIdStoredProcedure AspNet_SqlCacheTablesForChangeNotification [表名_AspNet_SqlCacheNotification_Trigger]
代码实现
/// <summary> /// 设置缓存 /// </summary> private object SetCache() { //自定义的数据操作类 var dal = new InterfaceCallDal.DALProvider(appversion); //创建数据集 这里可能有点多此一举哈。。 dal.CreateDataSet("table_test"); DataSet ds = dal.ProviderData; //根据连接字符串和表名通知该数据库的表实行缓存依赖通知 //EnableTableForNotifications是静态方法,有两个重载方法 //第一个参数为数据库的连接字符串,第二个参数为缓存所依赖的数据库表名 SqlCacheDependencyAdmin.EnableTableForNotifications(dal.ConStr, "table_test"); //通过web配置文件读取ZitOCS需要的连接字符串,并指明数据集中与缓存依赖的表 //第一个参数为web节点指定链接字符串,第二个参数为数据集中与缓存依赖的DataTable var sqlCache = new SqlCacheDependency("SqlCache", "table_test"); //插入缓存。第一个参数为缓存名称,第二个为数据源,第三个为依赖实例 HttpRuntime.Cache.Insert(cacheKey, ds, sqlCache); return HttpRuntime.Cache.Get(cacheKey); }
/// <summary> /// 一个数据提供类 /// </summary> public class DALProvider { //默认查询字符串 public DALProvider(string appversion) { _sqlStr = string.Format("select name,enabled from table_test(nolock) where version='{0}' and app_type='app'", appversion); } private DataSet ds = new DataSet(); private readonly string _conStr = ConfigHelper.SqlCacheConn; public string ConStr { get { return _conStr; } } private readonly string _sqlStr; public DataSet ProviderData { get { return ds.Tables.Count == 0 ? null : ds; } } //创建数据集 public void CreateDataSet(string tableName) { var da = new SqlDataAdapter(_sqlStr, _conStr); da.Fill(ds, tableName); } }
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微服务架构学习与思考:SOA架构与微服务架构对比分析
· tomcat为什么假死了
· 聊一聊 Linux 上对函数进行 hook 的两种方式
· C# 锁机制全景与高效实践:从 Monitor 到 .NET 9 全新 Lock
· 一则复杂 SQL 改写后有感
· 完成微博外链备案,微博中直接可以打开园子的链接
· 推荐 3 种 .NET Windows 桌面应用程序自动更新解决方案
· .NET 10 支持Linux/Unix 的Shebang(Hashbang)
· 一个基于 .NET 开源、模块化 AI 图像生成 Web 用户界面
· 上周热点回顾(6.9-6.15)