博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
步步为营-79-缓存
阅读量:4332 次
发布时间:2019-06-06

本文共 3368 字,大约阅读时间需要 11 分钟。

缓存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

 

转载于:https://www.cnblogs.com/YK2012/p/7050579.html

你可能感兴趣的文章
crash 收集
查看>>
507 LOJ 「LibreOJ NOI Round #1」接竹竿
查看>>
UI基础--烟花动画
查看>>
2018. 2.4 Java中集合嵌套集合的练习
查看>>
精通ASP.NET Web程序测试
查看>>
vue 根据不同属性 设置背景
查看>>
51Nod1601 完全图的最小生成树计数 Trie Prufer编码
查看>>
Codeforces 1110D. Jongmah 动态规划
查看>>
android驱动在win10系统上安装的心酸历程
查看>>
优雅的程序员
查看>>
oracle之三 自动任务调度
查看>>
Android dex分包方案
查看>>
ThreadLocal为什么要用WeakReference
查看>>
删除本地文件
查看>>
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>
nginx反向代理docker registry报”blob upload unknown"解决办法
查看>>
gethostbyname与sockaddr_in的完美组合
查看>>