码迷,mamicode.com
首页 > 其他好文 > 详细

步步为营-79-缓存

时间:2017-06-19 22:21:23      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:表示   ram   枚举   分享   change   app   display   访问   删除   

缓存Cache,一种空间换取时间的技术,适用于经常访问,不常修改的数据.

1 写入缓存

1.1 方法一 Cache["message"]="ab";

1.2 方法二 Cache.insert("message","ab");

1.3 其他重载 Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);

参数:   key:用于引用该对象的缓存键。
           value: 要插入缓存中的对象。
           dependencies: 该项的文件依赖项或缓存键依赖项。 当任何依赖项更改时,该对象即无效,并从缓存中移除。 如果没有依赖项,则此参数包含 null。
           absoluteExpiration:所插入对象将到期并被从缓存中移除的时间。  如果使用绝对到期,则 slidingExpiration 参数必须为 System.Web.Caching.Cache.NoSlidingExpiration。
            slidingExpiration: 最后一次访问所插入对象时与该对象到期时之间的时间间隔。如果使用可调到期,则 absoluteExpiration 参数必须为 System.Web.Caching.Cache.NoAbsoluteExpiration。
            priority:该对象相对于缓存中存储的其他项的成本,由 System.Web.Caching.CacheItemPriority 枚举表示。 该值由缓存在退出对象时使用;具有较低成本的对象在具有较高成本的对象之前被从缓存移除。
            onRemoveCallback: 在从缓存中移除对象时将调用的委托(如果提供)。 当从缓存中删除应用程序的对象时,可使用它来通知应用程序。

1.4 缓存移除的4个原因

CacheItemRemovedReason:

       Removed = 1, System.Web.Caching.Cache.Remove(System.String) 方法调用从缓存中移除的。
       Expired = 2,从缓存移除该项的原因是它已过期。
       Underused = 3, 之所以从缓存中移除该项,是因为系统要通过移除该项来释放内存。
       DependencyChanged = 4, 从缓存移除该项的原因是与之关联的缓存依赖项已更改。
       
 2 例子  

2.1 Demo   

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Caching;

namespace CacheTest
{
    public partial class CacheDemo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //01 假设字符串abc是来自于数据库
            string str = "abc,来至于数据库";
            //02 将数据写入缓存中
            if (Cache["message"] == null)
            {
                Cache.Insert("message", str, null, DateTime.Now.AddSeconds(5), Cache.NoSlidingExpiration, CacheItemPriority.Low, RemoveCache);
                Response.Write("数据来自于数据库");
            }
            else {
                Response.Write("数据来自于缓存");
            }
        }

        //根据委托构造方法
        private void RemoveCache(string key, object value, CacheItemRemovedReason reason)
        {
            if (reason ==CacheItemRemovedReason.Expired )
            {
                
            }
        }
    }
}
1

2.2 页面缓存
<%@ OutputCache Duration="5" VaryByParam="*" %>

 Duration表示缓存时间,以秒为单位,超过这个时间则缓存失效

VaryByParam=“id”,表示对于相同页面的不同的id参数进行单独缓存。如果有多个确定缓存的参数,则将参数名用分号隔开即可,比如VaryByParam=“id;number”.如果想让任何不同的查询字符串都创建不同的缓存,则设置VaryByParam="*"

这个缓存是在服务器缓存的,不是在客户端,因为客户端还不断向服务器提交的请求的,只不过服务器看到有缓存就没有再执行页面类。

2.3 文件缓存依赖(当页面被访问时,从文本文件中读取数据)

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Caching;
using System.IO;

namespace CacheTest
{
    public partial class _03文件缓存依赖 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //01获取文件
            string filePath = Request.MapPath("被访问的文本文件.txt");
            if (Cache["fileContent"] == null)
            {
                
                //读取文件
                string fileContent = File.ReadAllText(filePath);
                //文件缓存依赖---如果文件发生变化,就会清楚缓存
                CacheDependency cdd = new CacheDependency(filePath);
                Cache.Insert("fileContent", fileContent, cdd);
                Response.Write("数据来自于文件");
            }
            else {
                Response.Write("数据来自于缓存" + Cache["fileContent"].ToString());
            }
        }
    }
}
3

技术分享

 

步步为营-79-缓存

标签:表示   ram   枚举   分享   change   app   display   访问   删除   

原文地址:http://www.cnblogs.com/YK2012/p/7050579.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!