缓存依赖

什么是缓存依赖,缓存依赖就是我们在为了提高系统的加载速度运用了一些必要缓存,但是缓存更新的条件,除了我们设定好的过期时间还存在一些外在依赖条件,比如依赖某些文件、依赖某些数据库,就是我们接下来要说的文件缓存依赖和数据库缓存依赖。。。

一、文件缓存依赖

当指定文件内容改变时,缓存会自动更新。这种方式非常适合读取配置文件的缓存处理。如果配置文件不变化,就一直读取缓存的信息,一旦配置发生变化,自动更新同步缓存的数据。

具体测试代码如下:

/// 获取当前应用程序指定CacheKey的Cache对象值
public static object GetCache(string CacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
return objCache[CacheKey];
}

/// <summary>
/// 设置以缓存依赖的方式缓存数据
/// </summary>
/// <param name="CacheKey">索引键值</param>
/// <param name="objObject">缓存对象</param>
/// <param name="cacheDepen">依赖对象</param>
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);
}

protected void Page_Load(object sender, EventArgs e)
{

string cacheKey = "testKey";
object obj = GetCache(cacheKey);
if (obj == null)
{
obj = DateTime.Now.ToString();
if (obj != null)
{
System.Web.Caching.CacheDependency dep = new System.Web.Caching.CacheDependency(Server.MapPath("Web.Config"));
SetCache(cacheKey, obj, dep);
}
}
Label1.Text = obj.ToString();

}

结果可以看到web.config不做改变时,Label1.Text显示的时间是取的缓存中的时间,一旦web.config做了修改缓存将会更新。

二、数据库依赖缓存

数据库缓存就是缓存依赖于数据库某张表,表不做修改时,取缓存数据,一旦做了修改即更新缓存,在用户体验方面效果更佳。

测试代码如下:

获取缓存(GetCache)和加入缓存(SetCache)的方法就重复贴了,看参见文件依赖缓存的代码,具体变化在Page_Load

protected void Page_Load(object sender, EventArgs e)
{

string cacheKey2 = "testData";
object obj2 = GetCache(cacheKey2);
if (obj2 == null)
{
obj2 = GetData();
if (obj2 != null)
{
System.Web.Caching.CacheDependency dep = new System.Web.Caching.SqlCacheDependency("codematic", "UserInfo");
SetCache(cacheKey2, obj2, dep);
}
}
GridView1.DataSource = (DataSet)obj2;
GridView1.DataBind();

}

private DataSet GetData()
{
string conString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["strcodematic"].ToString();
string sql = "select * from UserInfo";
DataSet ds = new DataSet();
SqlConnection conn = new SqlConnection(conString);
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
adapter.Fill(ds, "UserInfo");
conn.Close();
return ds;
}

你是不是以为这就结束了,结果是No,数据库缓存还需要一些配置,你首先得告诉系统你要给数据库做依赖缓存

解决方法:SqlCacheDependency数据库缓存依赖。

第一步: 修改web.config,让项目启用SqlCacheDependency 。

第二步:执行下述命令,为数据库启用缓存依赖。如果要配置SqlCacheDependency,则需要以命令行的方式执行。
aspnet_regsql.exe工具位于Windows\Microsoft.NET\Framework\[版本]文件夹中。

 OK,到此数据库缓存依赖操作基本完成,你可以看看对应启用了数据库依赖缓存的表在不做修改和修改之后,页面响应的差别

(数量少应该缓存的效果应该体现的不明显),你可以试试看。

原文地址:https://www.cnblogs.com/become/p/8554840.html