一,.Net中的缓存基础知识
.net中支持的两种依赖:
CacheDependency |
SqlDependency |
表示对于文件或者目录的依赖 |
表示对于SQL数据库的依赖 |
过期时间
绝对过期时间 |
滑动过期时间 |
|
一个特定的时间点,类型为DateTime
|
一个时间间隔,类型为TimeSpan |
优先级 : CacheItemPriority
由于我们需要缓存大量的数据,在内存有限的情况下,就必须对缓存的数据进行优先级分类,以便在需要的时候,将不重要的数据从缓存中移除。优先级用来指定缓存数据的重要性,重要的数据可以更长时间地保存在内存中。
删除通知
当被缓存的数据从内存中移除的时候,可以提供一个通知机制,来回调用户定义的方法,方法必须符合CacheItemRemovedCallback委托的定义。。
特别注意:
1,回调的时机是不可预知的,不能假定回调发生时,回调方法的执行线程存在HttpContext的上下文,为了在没有请求上下文的时候取得对Cache对象的引用,可以通过HttpRuntime的cache属性来使用应用程序的cache.
2,不能在页面上使用实例方法来作为回调方法,挡在页面上使用回调方法时,由于指向回调方法的引用会阻止垃圾回收机制,因此会造成内存很快耗光。
3,一般通过在自定义类的静态方法实现回调方法,或者使用页面对象的静态方法实现。
二,基于文件的缓存示例

SHOPEX简灰服装商城整站源码下载。 安装方法:1.解压上传程序至网站根目录.. 访问:域名/bak.(用户名:admin 密码:123456)2.进入帝国备份王后,配置数据库数据库信息.选择-www.taomoban.net目录.还原数据库.3.修改FTP目录下的config/config.phpphp 数据库连接信息.4.登陆网站后台--清空缓存..5.删除bak文件夹 后台:shopadm
首先在测试页面上加个label:
接着,加入缓存管理类:
namespace 基于文件的缓存依赖
{
public class CacheManager
{
public static string Message {
get {
HttpContext context = HttpContext.Current;
//首先从缓存中获取
string message = context.Cache["Message"] as string;
//如果缓存中没有数据
if (message==null)
{
string path = context.Server.MapPath("TestFileCache.txt");
message = System.IO.File.ReadAllText(path);
//将信息保存到缓存中,设置响应的过期时间为1分钟
context.Cache.Add(
"Message",
message,
new System.Web.Caching.CacheDependency(path),//依赖于文件或者目录的依赖
System.Web.Caching.Cache.NoAbsoluteExpiration,//不使用绝对过期时间
new TimeSpan(0, 0, 5),//缓存的时间
System.Web.Caching.CacheItemPriority.Normal, //缓存的优先级
Callback); //过期时的回调
}
return message;
}
}
///
/// Callbacks the specified key.
///
/// The key.
/// The value.
/// The reason.
/// Editor:v-liuhch CreateTime:2015/5/26 20:13:22
private static void Callback(
string key,
Object value,
System.Web.Caching.CacheItemRemovedReason reason
//原因
) {
if (reason == System.Web.Caching.CacheItemRemovedReason.Expired)
{
HttpRuntime.Cache.Insert("Message","时间已到,缓存已过期");
}
}
}
}这里,区别下cache的Add方法和Insert方法:
在调用Add的时候,如果要加入的缓存项存在的话,则会调用失败;但是如果用insert插入,则新插入的value值会覆盖掉原来的value值。
在webform1中,加入一行测试下:
protected void Page_Load(object sender, EventArgs e)
{
this.label1.Text = CacheManager.Message; //获取缓存
}
可以看到已经读到文件中的内容了,因为设置的是5s后过期,所以5s后我们刷新下:

但是多次测试我们会发现,刷新后出现过期的准确时间并不是5s,同时验证了回调的时机是不可预知的。
以上就是.net缓存——基于文件的缓存的内容,更多相关内容请关注PHP中文网(www.php.cn)!









