110,533
社区成员
发帖
与我相关
我的任务
分享
public static T GetCache<T>(string key, CacheReadFunc<T> cacheReadFunc) where T : class
{
var cacheData = MemoryCache.Default[key] as T;
if (cacheData == null)
{
if (cacheReadFunc != null)
{
cacheData = cacheReadFunc(out var policy);
MemoryCache.Default.Set(key, cacheData, policy);
}
}
return cacheData;
}
public static CacheItemPolicy SqlChangePolicy(string sql)
{
var connStr = Maiji.Common.Data.Data.ConnectionString();
if (!_dependency)
{
// 只需要执行一次;
_dependency = true;
SqlDependency.Start(connStr);
}
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand command = new SqlCommand(sql, conn))
{
command.Notification = null;
conn.Open();
SqlDependency dependency = new SqlDependency(command);
dependency.AddCommandDependency(command);
SqlChangeMonitor monitor = new SqlChangeMonitor(dependency);
CacheItemPolicy policy = new CacheItemPolicy();
policy.ChangeMonitors.Add(monitor);
command.ExecuteScalar();
return policy;
}
}
}
var data = GetCache("User-" + userId, (out CacheItemPolicy policy) =>
{
policy = SqlChangePolicy($"select [NickName] from [dbo].[SysUser] where [Id]='{userId}'");
// 这里实现 return 新的待缓存的数据, 省略
});