zoukankan      html  css  js  c++  java
  • ASP.NET缓存 Cache之数据缓存

    添加 Cache[Key]=object  or Cache.Insert

    移除 Cache.Remove(key)

    1、将值直接写入Cache

     代码如下 复制代码

    HttpContext.Current.Cache["One"] = "1";

    使用'绝对过期'方式处理缓存,过期时间为:9999年12月31日 (不推荐使用该方法处理缓存,并且应在适当的时候清空缓存Key)


    2、使用Insert(String, Object)插入Cache

     代码如下 复制代码

    string cacheKey = "Two";
    object cacheValue = HttpContext.Current.Cache.Get(cacheKey);

    if(cacheValue == null)
    {
        cacheValue = WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;

        HttpContext.Current.Cache.Insert(cacheKey, cacheValue);
    }

    //显示指定缓存的Key 与 Value
    this.ShowMessage(cacheKey, cacheValue.ToString());

    3、使用Insert(String, Object, CacheDependency, DateTime, TimeSpan)插入Cache

     代码如下 复制代码

    string cacheKey = "__cache__students";

    DataSet dataSet = this.Cache.Get(cacheKey) as DataSet;

    if(dataSet == null)
    {
        dataSet = new DataSet();

        //加载XML并填充至DataSet
        dataSet.ReadXml(this.Server.MapPath(@"XMLFile.xml"));

        //加入缓存,并设定'绝对过期时间'为5分钟
        this.Cache.Insert(cacheKey, dataSet, null, DateTime.Now.AddMinutes(5), System.Web.Caching.Cache.NoSlidingExpiration);
    }

    //绑定DataGrid数据
    grdDefault.DataSource = dataSet;
    grdDefault.DataBind();

    该方法较重要的两个参数为absoluteExpiration及slidingExpiration
    absoluteExpiration  DateTime类型,代表绝对过期时间
    slidingExpiration  TimeSpan类型,代表滑动过期时间
    absoluteExpiration与slidingExpiration不能同时使用
    例如:设定了absoluteExpiration参数时,slidingExpiration必须设定为System.Web.Caching.Cache.NoSlidingExpiration
    反之:设定了slidingExpiration参数时,http://www.111cn.net/net/net/56762.htm absoluteExpiration必须设定为System.Web.Caching.Cache.NoAbsoluteExpiration

     4、使用Insert(String, Object, CacheDependency, DateTime, TimeSpan, CacheItemPriority,

     代码如下 复制代码

    CacheItemRemovedCallback)插入Cache

    public partial class PriorityAndCallbackDemo : System.Web.UI.Page
    {
        #region 静态字段
        static bool CacheItemRemoved = false;
        static CacheItemRemovedReason Reason;
        static string CacheItemKey = "fw__cache__students";
        #endregion

        #region 事件处理
        //页面加载
        protected void Page_Load(object sender, EventArgs e)
        {
            //缓存项已移除
            if(PriorityAndCallbackDemo.CacheItemRemoved)
            {
                ltMessage.Text = string.Format("Key={0}已从缓存移出,原因为:{1}", PriorityAndCallbackDemo.CacheItemKey, PriorityAndCallbackDemo.Reason.ToString());
            }
        }

        //'添加缓存'按钮 点击事件 处理
        protected void btnAddCache_Click(object sender, EventArgs e)
        {
            DataSet dataSet = this.Cache.Get(PriorityAndCallbackDemo.CacheItemKey) as DataSet;

            if(dataSet == null)
            {
                dataSet = new DataSet();
                dataSet.ReadXml(this.Server.MapPath(@"XMLFile.xml"));

                //使用 Web.config 作为缓存过期依赖项
                CacheDependency dependency = new CacheDependency(this.Server.MapPath(@"Web.config"), DateTime.Now);

                //加入缓存,设定优先级为默认级别
                this.Cache.Insert(PriorityAndCallbackDemo.CacheItemKey, dataSet, dependency, DateTime.Now.AddMinutes(1), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.Default, new CacheItemRemovedCallback(this.CacheItemRemovedHandler));
            }

            //绑定GridView数据
            grdDefault.DataSource = dataSet;
            grdDefault.DataBind();
        }

        //'移除缓存'按钮 点击事件 处理
        protected void btnRemoveCache_Click(object sender, EventArgs e)
        {
            if(this.Cache[PriorityAndCallbackDemo.CacheItemKey] != null)
            {
                this.Cache.Remove(PriorityAndCallbackDemo.CacheItemKey);
            }
        }
        #endregion

        #region 私有方法
        //缓存项移除事件处理
        private void CacheItemRemovedHandler(string key, object value, CacheItemRemovedReason relason)
        {
            PriorityAndCallbackDemo.CacheItemRemoved = true;
            PriorityAndCallbackDemo.Reason = relason;
        }
        #endregion
    }

    该方法较重要的两个参数为CacheItemPriority及CacheItemRemovedCallback
    CacheItemPriority  缓存项优先级,当服务器内存不够时,优先级越高的项越不容易被移除
    CacheItemRemovedCallback  该参数为委托类型,当缓存项被移除时所调用,包含Reason参数用于表示缓存项被移除的原因

    【我是怎么用的】

    首先理解缓存策略。可调过期策略 和 绝对过期策略。注意,两则不能同时使用
     

    使用可调过期策略,需要将absoluteExpiration=DateTime.MaxValue ,TimeSpan .FromMinutes(10)设置项目只有在10分钟内不被使用才会被移除

     代码如下 复制代码

    Cache.Insert("data", "123", null , DateTime.MaxValue, TimeSpan.FromMinutes(10));

    绝对策略,如天气报告,将信息保存60分钟

     代码如下 复制代码

    Cache.Insert("data", "123", null , DateTime.Now.AddMinutes(60), TimeSpan.Zero);

    缓存依赖。

    即一个缓存的失效依赖另外一个object。这里的object可以指另外一个缓存,或者一个文件,或者....


    类:CacheDependency 命名空间 System.Web.Caching.CacheDependency依赖于其它缓存项目

     代码如下 复制代码

    System.Web.Caching.CacheDependency cacheDependency = new System.Web.Caching.CacheDependency (null, new string [] { "time" });
    Cache.Insert( "number", ++num, cacheDependency);
     
    依赖于文件或文件夹
     
    System.Web.Caching. CacheDependency cacheDependency = new System.Web.Caching.CacheDependency ( "test.xml");
    当test.xml文件删除、更新时自动从缓存中移除
     
    System.Web.Caching.CacheDependency cacheDependency = new System.Web.Caching.CacheDependency(null, new string[] { "time" });
    Cache.Insert("test", "123", cacheDependency);

     
    移除项目回调
     Cache.Insert("test", "123", null , DateTime.Now.AddSeconds(10), TimeSpan.Zero, new CacheItemUpdateCallback(Test));
     
     
     private void Test(string key, CacheItemUpdateReason reason, out object expensiveObject, out CacheDependency dependency, out DateTime absoluteExpiration, out TimeSpan slidingExpiration)
        {
     
        }
     

  • 相关阅读:
    3.0.35 platform 设备资源和数据
    老子《道德经》第六十三章
    linux spi 主机与外设分离思想
    3.0.35 platform 总线、设备与驱动
    Linux 内核SPI子系统架构
    C 显示一个字符的编码值
    JAVA高级特性--内部类
    Java面向对象----接口概念
    Java面向对象----抽象类
    Java面向对象----多态概念,对象上下转型
  • 原文地址:https://www.cnblogs.com/alibai/p/3572850.html
Copyright © 2011-2022 走看看