ASP.NET HttpRuntime.Cache缓存类使用总结

  1.高性能文件缓存key-value存储—Redis

  2.高性能文件缓存key-value存储—Memcached

1.前言

  a.在Web开发中,我们经常能够使用到缓存对象(Cache),在ASP.NET中提供了两种缓存对象,HttpContext.Current.Cache和HttpRuntime.Cache,那么他们有什么区别呢?下面简单描述一下:

    (1):HttpContext.Current.Cache 为当前Http请求获取Cache对象,通俗来说就是由于此缓存封装在了HttpContenxt中,而HttpContext只局限于Web中,所以此缓存信息只能够在Web中使用。

    (2):HttpRuntime.Cache 获取当前应用程序的Cache,通俗来说就是此缓存信息虽然被放在了System.Web命名空间下,但是非Web程序也可以使用此缓存。

    上面两种类型作对比,我们就能够看出,一般情况下我们都建议使用HttpRuntime.Cache 。

  b.在缓存领域中,现在不止只有ASP.NET提供的缓存,还有Redis和Memcached等开源的Key_Value存储系统,也是基于内存去管理的,那么我们在这些文章中基本也都会有说到。

  c.那么这篇文章我们就简单的封装一下HttpRuntime.Cache类的公用类,提供给别人直接使用,如有错误或者问题,请留言,必在第一时间去处理。

  d.缓存详解:http://www.cnblogs.com/caoxch/archive/2006/11/20/566236.html

  e.GitHub地址:https://github.com/kencery/Common/tree/master/KenceryCommonMethod/%E7%BC%93%E5%AD%98

2.为什么使用缓存

  a.那么说了这么多,最终要的一个问题是我们为什么要使用缓存呢?

    (1):降低延迟,使响应速度加快。

    (2):降低网络传输,使响应速度加快。

    ...........................

    简单总结就是一句话,使用缓存是为了使系统更加稳定和快速。

  b.上面我们知道了为什么使用缓存,那么在什么情况下我们能够使用缓存呢?

    (1):数据可能会被频繁的使用。

    (2):数据的访问不频繁,但是它的生命周期很长,这样的数据建议也缓存起来,比如:淘宝的商品明细。

    ......................

  c.当然一般系统中我们建议使用Memcached和Redis键值对来存储缓存信息。

  d.那么是不是我们在写程序的时候想写缓存就写缓存呢?当然不是,我们还要判断哪里该用,哪里不该用,比如:如果我们整页输出缓存的话,会影响我们数据的更新等等.......

  e.这篇博文我们整理了HttpRuntime Cache的共同类,将如何使用此类都已经在代码中展示出来,代码如下:

3.代码展示

  1 // 源文件头信息:
  2 // <copyright file="HttpRuntimeCache.cs">
  3 // Copyright(c)2014-2034 Kencery.All rights reserved.
  4 // 个人博客:http://www.cnblogs.com/hanyinglong
  5 // 创建人:韩迎龙(kencery)
  6 // 创建时间:2015-8-11
  7 // </copyright>
  8
  9 using System;
 10 using System.Collections;
 11 using System.Web;
 12 using System.Web.Caching;
 13
 14 namespace KenceryCommonMethod
 15 {
 16     /// <summary>
 17     /// HttpRuntime Cache读取设置缓存信息封装
 18     /// <auther>
 19     ///     <name>Kencery</name>
 20     ///     <date>2015-8-11</date>
 21     /// </auther>
 22     /// 使用描述:给缓存赋值使用HttpRuntimeCache.Set(key,value....)等参数(第三个参数可以传递文件的路径(HttpContext.Current.Server.MapPath()))
 23     /// 读取缓存中的值使用JObject jObject=HttpRuntimeCache.Get(key) as JObject,读取到值之后就可以进行一系列判断
 24     /// </summary>
 25     public class HttpRuntimeCache
 26     {
 27         /// <summary>
 28         /// 设置缓存时间,配置(从配置文件中读取)
 29         /// </summary>
 30         private const double Seconds = 30*24*60*60;
 31
 32         /// <summary>
 33         /// 缓存指定对象,设置缓存
 34         /// </summary>
 35         public static bool Set(string key, object value)
 36         {
 37             return Set(key, value, null, DateTime.Now.AddSeconds(Seconds), Cache.NoSlidingExpiration,
 38                 CacheItemPriority.Default, null);
 39         }
 40
 41         /// <summary>
 42         ///  缓存指定对象,设置缓存
 43         /// </summary>
 44         public static bool Set(string key, object value, string path)
 45         {
 46             try
 47             {
 48                 var cacheDependency = new CacheDependency(path);
 49                 return Set(key, value, cacheDependency);
 50             }
 51             catch
 52             {
 53                 return false;
 54             }
 55         }
 56
 57         /// <summary>
 58         /// 缓存指定对象,设置缓存
 59         /// </summary>
 60         public static bool Set(string key, object value, CacheDependency cacheDependency)
 61         {
 62             return Set(key, value, cacheDependency, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
 63                 CacheItemPriority.Default, null);
 64         }
 65
 66         /// <summary>
 67         /// 缓存指定对象,设置缓存
 68         /// </summary>
 69         public static bool Set(string key, object value, double seconds, bool isAbsulute)
 70         {
 71             return Set(key, value, null, (isAbsulute ? DateTime.Now.AddSeconds(seconds) : Cache.NoAbsoluteExpiration),
 72                 (isAbsulute ? Cache.NoSlidingExpiration : TimeSpan.FromSeconds(seconds)), CacheItemPriority.Default,
 73                 null);
 74         }
 75
 76         /// <summary>
 77         /// 获取缓存对象
 78         /// </summary>
 79         public static object Get(string key)
 80         {
 81             return GetPrivate(key);
 82         }
 83
 84         /// <summary>
 85         /// 判断缓存中是否含有缓存该键
 86         /// </summary>
 87         public static bool Exists(string key)
 88         {
 89             return (GetPrivate(key) != null);
 90         }
 91
 92         /// <summary>
 93         /// 移除缓存对象
 94         /// </summary>
 95         /// <param name="key"></param>
 96         /// <returns></returns>
 97         public static bool Remove(string key)
 98         {
 99             if (string.IsNullOrEmpty(key))
100             {
101                 return false;
102             }
103             HttpRuntime.Cache.Remove(key);
104             return true;
105         }
106
107         /// <summary>
108         /// 移除所有缓存
109         /// </summary>
110         /// <returns></returns>
111         public static bool RemoveAll()
112         {
113             IDictionaryEnumerator iDictionaryEnumerator = HttpRuntime.Cache.GetEnumerator();
114             while (iDictionaryEnumerator.MoveNext())
115             {
116                 HttpRuntime.Cache.Remove(Convert.ToString(iDictionaryEnumerator.Key));
117             }
118             return true;
119         }
120
121         //------------------------提供给上面方法进行调用-----------------------------------
122         /// <summary>
123         /// 设置缓存
124         /// </summary>
125         public static bool Set(string key, object value, CacheDependency cacheDependency, DateTime dateTime,
126             TimeSpan timeSpan, CacheItemPriority cacheItemPriority, CacheItemRemovedCallback cacheItemRemovedCallback)
127         {
128             if (string.IsNullOrEmpty(key) || value == null)
129             {
130                 return false;
131             }
132             HttpRuntime.Cache.Insert(key, value, cacheDependency, dateTime, timeSpan, cacheItemPriority,
133                 cacheItemRemovedCallback);
134             return true;
135         }
136
137         /// <summary>
138         /// 获取缓存
139         /// </summary>
140         private static object GetPrivate(string key)
141         {
142             return string.IsNullOrEmpty(key) ? null : HttpRuntime.Cache.Get(key);
143         }
144     }
145 }
时间: 2024-10-13 19:47:36

ASP.NET HttpRuntime.Cache缓存类使用总结的相关文章

ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供,不过该内存类我看了一下,并没有支持文件的缓存依赖. 因此,在此前提下,预计.NET Core明年出来2.0版本时,可能也没支持文件的缓存依赖,因此,有必要提前准备实现. 在写此文前,我扫了一下园子里关于自定义缓存类的相关文章. 发现很多自定义的缓存类文章都简单停留在对字典的增删改查. 因此,决定补充

Asp.net缓存技术(HttpRuntime.Cache)

一.缓存: 5个等级的缓存 1级是网络级缓存,缓存在浏览器,CDN以及代理服务器中   (举个例子:每个帮助页面都进行了缓存,访问一个页面的代码非常简单) 2级是由.net框架 HttpRuntime.Cache完成,在每台服务器的内存中. 3级Redis,分布式内存键值存储,在多个支撑同一个站点的服务器上共享缓存项. 4级SQL Server Cache,整个数据库,所有数据都被放到内存中. 5级SSD.通常只在SQL Server预热后才生效. 二.下面主要介绍HttpRuntime.Cac

服务端缓存HttpRuntime.Cache的使用

HttpRuntime.Cache.Insert("缓存key", "缓存content", null, DateTime.Now.AddMinutes(3), TimeSpan.Zero);//存入本地服务端 string cacheContent = string.Empty; if (HttpRuntime.Cache["缓存key"] == null)//当缓存为空的时候执行的逻辑 { Response.AddHeader("r

HttpRuntime.Cache 失效

最近做一个报纸内容类网站,为了提高响应速度,将首页各栏目以及二级栏目中Part文献列表存储在HttpRuntime.Cache缓存中,发布后发现问题,刚插入的缓存很快就失效,本机调试没有问题. 由于HttpRuntime.Cache的缓存机制 对象具有依赖项.到期和优先级策略 ,检查代码没有触发依赖项改变或到期的逻.怀疑问题出在IIS内存管理方面的设定上. 对比测试机 应用程序池 高级设置,发现以下设置项:专用内存限制被加粗,表示这顶应该是被其它人设置过,将该项设置为0后,再次测试 HttpRu

HttpRuntime.Cache .Net自带的缓存类

1 using System; 2 using System.Collections; 3 using System.Web; 4 using System.Web.Caching; 5 /** 6 * author:qixiao 7 * create2017-6-6 11:54:07 8 * */ 9 namespace QX_Frame.Helper_DG 10 { 11 public class HttpRuntimeCache_Helper_DG 12 { 13 /// <summary

ASP.NET cache缓存的用法

本文导读:在.NET运用中经常用到缓存(Cache)对象.有HttpContext.Current.Cache以及HttpRuntime.Cache,HttpRuntime.Cache是应用程序级别的,而HttpContext.Current.Cache是针对当前WEB上下文定义的.HttpRuntime下的除了WEB中可以使用外,非WEB程序也可以使用. 1.HttpRuntime.Cache 相当于就是一个缓存具体实现类,这个类虽然被放在了 System.Web 命名空间下了.但是非 Web

缓存 HttpContext.Current.Cache和HttpRuntime.Cache的区别

先看MSDN上的解释:HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象.HttpRuntime.Cache:获取当前应用程序的Cache. 我们再用.NET Reflector工具看看HttpContext.Cache和HttpRuntime.Cache的实现://HttpContext.Cache和HttpRuntime.Cache实现    //System.Web.HttpContext.Cache属性实现    public sealed cl

缓存二、HttpRuntime.Cache用法

上一篇写了Asp.net页面缓存,本篇介绍在服务器端进行缓存.微软.net给我提供了HttpRuntime.Cache对象进行缓存.个人对缓存的理解是,将从数据库.文件.或业务逻辑计算出来的数据,保存在内存中,当下一次遇到相同内容的请求就直接将保存在内存中的数据返回给请求者.这样做的好处是可以提高访问效率,减少文件或是数据库的读取,属于"以空间换时间",适当的运用好Cache可以很大程度提高程序性能.关于Cache本文所包含的内容有 Page.Cache,HttpRuntime.Cac

C#语法糖之 cache操作类 asp.net

因为考虑到我下面我将写session cookies 等 操作类 ,与cache具有共性. 所以都统一继承了IHttpStorageObject  abstract class 来保函数风格的统一 ,但是又为了调用方便,抽象中又使用了单例来简化调用. 使用方法很简单: //声名一个数据集合 var listString = new List<string>() { "a", "b", "c" }; //缓存key string key