C#中缓存System.Web.Caching用法总结

 更新时间:2022年04月26日 10:45:38   作者:農碼一生  
本文详细讲解了C#中缓存System.Web.Caching的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

System.Web.Caching.Cache Insert和Add方法的区别

Add()

object Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);

Insert()

void Insert(string key, object value); //永不过期
void Insert(string key, object value, CacheDependency dependencies);  //依赖
void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration);//绝对时间过期:
void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemUpdateCallback onUpdateCallback);  //依赖+回调
void Insert(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);  //依赖+优先级+回调

比较、区别

a). Insert方法支持5种重载,使用灵活,而Add方法必须提供7个参数;

b). Add方法可以返回缓存项的数据对象,Insert 返回Void;

c). 添加重复缓存情况下(Key已存在),Insert会替换该项,而Add方法则不执行任何操作,并返回原来保存的object对象(Update 2014-03-18)。

过期策略

  • a). 永不过期

Insert(string key, object value);

  • b). 绝对时间过期

DateTime.Now.AddSeconds(10)表示缓存在10秒后过期,TimeSpan.Zero表示不使用平滑过期策略。

例:Cache.Insert("Data", ds,null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);

  • c). 变化时间过期(平滑过期)

DateTime.MaxValue表示不使用绝对时间过期策略,TimeSpan.FromSeconds(10)表示缓存连续10秒没有访问就过期。

例:Cache.Insert("Data", ds, null, DateTime.MaxValue, TimeSpan.FromSeconds(10));

使用Remove清空所有Cache

概述清空缓存主要通过Remove()方法,但是只能通过传入一个Key,清空一个。GetEnumerator()方法用于获取所有缓存项。MoveNext()用于将位置移动到下一个缓存项。如果想清空所有缓存,由于Cache类没有提供RemoveAll()方法,所以可以通过以下方式实现:

        public void removeAllCache()
        {
            IDictionaryEnumerator DicCache = HttpRuntime.Cache.GetEnumerator();
            int count = HttpRuntime.Cache.Count;
            for (int i = 0; i < count; i++)
            {
                DicCache.MoveNext();
                HttpRuntime.Cache.Remove(DicCache.Entry.Key.ToString());
            }
        }

存放缓存

 			#region 存放对应缓存
            Cache cache = HttpRuntime.Cache;
            //文件缓存依赖
            cache.Insert("CC", "依赖项测试", new CacheDependency(@"D:\123.txt"));
            //这时候在about.aspx页面添加一行代码,当更改一下D:123.txt时,cache["cc"]会立即被清空


            //30秒后就到期,立即移除,没商量
            cache.Insert("DD", "绝对过期测试", null, DateTime.Now.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration);


            //弹性过期时间,当缓存没使用10秒就过期
            cache.Insert("EE", "滑动过期测试", null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(10));

            //文件权重级别
            cache.Add("FF", "缓存重要级别", null, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(30), CacheItemPriority.High, null);
            //在服务器释放系统内存时,具有该优先级级别的缓存项最有可能被从缓存删除。
            //Low = 1,-------------在服务器释放系统内存时,具有该优先级级别的缓存项比分配了 System.Web.Caching.CacheItemPriority.Normal优先级的项更有可能被从缓存删除。
            //BelowNormal = 2,---------------在服务器释放系统内存时,具有该优先级级别的缓存项很有可能被从缓存删除,其被删除的可能性仅次于具有 System.Web.Caching.CacheItemPriority.Low
            //Normal = 3,-------------------缓存项优先级的默认值为 System.Web.Caching.CacheItemPriority.Normal。
            //Default = 3,----------------在服务器释放系统内存时,具有该优先级级别的缓存项被删除的可能性比分配了 System.Web.Caching.CacheItemPriority.Normal优先级的项要小。
            //AboveNormal = 4,-------------在服务器释放系统内存时,具有该优先级级别的缓存项最不可能被从缓存删除。
            //High = 5,-------------------在服务器释放系统内存时,具有该优先级级别的缓存项将不会被自动从缓存删除。但是,具有该优先级级别的项会根据项的绝对到期时间或可调整到期时间与其他项一起被移除
            // NotRemovable = 6,


            //文件权重级别+Callback
            cache.Add("GG", "缓冲移除通知", null, DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration, CacheItemPriority.Low, Show);

            #endregion
        //回调
        public void Show(string key, object value, CacheItemRemovedReason reason)
        {
            Cache cache = HttpRuntime.Cache;
            Cache.Insert("GG", "缓存被清空啦!缓存被清空啦!缓存被清空啦!缓存被清空啦!缓存被清空啦!缓存被清空啦!缓存被清空啦!");
        }

获取缓存

            #region 获取对应缓存
            //直接打开本页面,输出缓存依赖项测试
            //当更改D:\123.txt之后,在刷新,输出空,表明该Cache是依赖于D:\123.txt的
            Response.Write(HttpContext.Current.Cache["CC"]);


            //持续刷新30后,不会再输出  绝对过期测试
            Response.Write(HttpContext.Current.Cache["DD"]);


            //如果一直不停地刷新,都会继续输出,但是当超过10秒后再刷新,不会再输出   滑动缓存测试
            Response.Write(HttpContext.Current.Cache["EE"]);

            //文件权重级别
            Response.Write(HttpRuntime.Cache["FF"]);

            //测试回调函数
            Response.Write(HttpRuntime.Cache["GG"]);

            #endregion

到此这篇关于C#中缓存Sytem.Web.Caching的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Unity实现桌面反弹的示例代码

    Unity实现桌面反弹的示例代码

    反弹球是小时候都玩过的网页小游戏,但是很多人都不知道怎样实现,本文就来介绍一下Unity实现桌面反弹的示例代码,感兴趣的可以了解一下
    2021-05-05
  • 详解C# partial 关键字的使用

    详解C# partial 关键字的使用

    局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。接下来通过本文给大家分享C# partial 关键字的使用,感兴趣的的朋友一起看看吧
    2017-08-08
  • C#程序(含多个Dll)合并成一个Exe的简单方法

    C#程序(含多个Dll)合并成一个Exe的简单方法

    这篇文章主要为大家详细介绍了C#程序(含多个Dll)合并成一个Exe的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 详解C# 中Session的用法

    详解C# 中Session的用法

    这篇文章主要介绍了C# 中Session的用法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C#使用ZXing.Net实现识别二维码和条码

    C#使用ZXing.Net实现识别二维码和条码

    ZXing用Java实现的多种格式的一维二维条码图像处理库,而ZXing.Net是其.Net版本的实现,本文主要为大家详细介绍了如何使用ZXing.Net实现识别二维码和条码,需要的可以参考下
    2024-01-01
  • C#常见算法面试题小结

    C#常见算法面试题小结

    这篇文章主要介绍了C#常见算法面试题,包含了常见的排序、字符串操作、类的操作等技巧,需要的朋友可以参考下
    2014-09-09
  • C#实现封装常用Redis工具类的示例代码

    C#实现封装常用Redis工具类的示例代码

    这篇文章主要为大家详细介绍了C#实现封装常用Redis工具类的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • C#的字符串比较

    C#的字符串比较

    这篇文章主要介绍了c# 字符串操作的相关知识,文中讲解的非常详细,代码帮助大家更好的学习,感兴趣的朋友可以参考下,希望能给你带来帮助
    2021-07-07
  • 利用多线程句柄设置鼠标忙碌状态的实现方法

    利用多线程句柄设置鼠标忙碌状态的实现方法

    怎样利用多线程句柄设置鼠标忙碌状态呢?下面小编就为大家介绍一下具体的实现方法吧!需要的朋友可以过来参考下
    2013-08-08
  • C#中的一些延时函数

    C#中的一些延时函数

    这篇文章主要介绍了C#中的一些延时函数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论