数据缓存.NET 4.0 MemoryCache with SqlChangeMonitor
2017-09-27 14:24
260 查看
数据缓存必须在数据库上开启 SQL Server Service Broker服务,执行以下代码
ALTER DATABASE database_name SET TRUSTWORTHY ON WITH ROLLBACK IMMEDIATE GO ALTER DATABASE database_name SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE GO ALTER AUTHORIZATION ON DATABASE::database_name TO sa
public class UserDal { public List<UserInfo> GetModelList() { const string Users = "Users"; List<UserInfo> list = null; if (MemoryCache.Default.Contains("Users") == false) { list = new List<UserInfo>(); CacheItemPolicy policy = new CacheItemPolicy();//缓存过期策略 string connStr = ConfigurationManager.ConnectionStrings["MyDatabaseConnection"].ConnectionString; SqlDependency.Start(connStr);//必须先调用,否则无法执行Sql命令 using (SqlConnection conn = new SqlConnection(connStr)) { //注意:sql语句中必须要指名查询的字段名,不能使用*号,并且表名必须的为:dbo.表名,否则缓存无效 using (SqlCommand command = new SqlCommand("select Username,DisplayName from dbo.users", conn)) { command.Notification = null; SqlDependency dep = new SqlDependency();//Sql依赖命令 dep.AddCommandDependency(command);//建立依赖关系 conn.Open(); using(IDataReader reader = command.ExecuteReader())//必须执行一次命令,否则无法注册通知 { while (reader.Read()) { list.Add(BindingReader(reader)); } } SqlChangeMonitor monitor = new SqlChangeMonitor(dep); policy.ChangeMonitors.Add(monitor);//如果数据库表更改,策略使将缓存数据从缓存中移除 } } MemoryCache.Default.Add("Users", list, policy); //MemoryCache.Default.Set(Users, list, policy); } else { list = MemoryCache.Default.Get(Users) as List<UserInfo>; if (list.FirstOrDefault(m=>m.UserName=="system") ==null) { list.Add(new UserInfo { UserName = "system", DisplayName = "缓存" }); } } return list; } private UserInfo BindingReader(IDataReader reader) { UserInfo model = new UserInfo(); model.UserName = reader["UserName"].ToString(); model.DisplayName = reader["DisplayName"].ToString(); return model; } }
相关文章推荐
- .NET 4.0 MemoryCache with SqlChangeMonitor
- DataStage job monitor fails with out of memory error in the javacore file
- Oracle SQL with multiple versions in the library cache
- 背后的机制 for notifications on data change: SqlNotificationRequest, SqlDependency and SqlCacheDependency
- My SQL update Memory Cache
- SmartSql = Dapper + MyBatis + Cache(Memory | Redis) + ZooKeeper + R/W Splitting + ......
- Advanced SQL Server Monitor with Performance Graph, Analysis and Version Control
- Correlating SQL Server Profiler with Performance Monitor
- nginx: [emerg] the size 10485760 of shared memory zone "cache_one" conflicts with already declared size 0
- SQL Cache Dependency with SQL Server, LINQ and ASP.NET 3.5
- Caché Monitor 2.03发布,Caché的SQL开发工具 - 开源中国社区
- Multi-core compute cache coherency with a release consistency memory ordering model
- Script to Monitor SQL Server Memory Usage
- ASP.NET SQLCacheDependency with SQLite and Triggers
- SparkSQL On Yarn with Hive,操作和访问Hive表
- java.lang.OutOfMemoryError: Failed to allocate a 22440958 byte allocation with 16777216 free bytes
- Capture started with SQLCODE is "-2657", Apply started got ASN1051W with The error code is "4A5102"
- Change Log of Joomsport: 改變[VIEW]賽事編排的mon參數(Synchronized with server)
- Sql 中 with 的使用例子