• 步步为营-79-缓存


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

  • 相关阅读:
    selenium使用
    爬取梨视频
    django实现事务
    django admin模块使用
    跨域问题和django中实现跨域
    Java多线程Condition定点通知
    Java创建线程四种方式
    JVM之JVM体系结构
    Java线程状态
    Java正则表达式解析网页源码
  • 原文地址:https://www.cnblogs.com/YK2012/p/7050579.html
Copyright © 2020-2023  润新知