博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#中的Cache缓存技术
阅读量:5360 次
发布时间:2019-06-15

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

1、HttpRuntime.Cache 相当于就是一个缓存具体实现类,这个类虽然被放在了 System.Web 命名空间下了。但是非 Web 应用也是可以拿来用的。

2、HttpContext.Cache 是对上述缓存类的封装,由于封装到了 HttpContext ,局限于只能在知道 HttpContext 下使用,即只能用于 Web 应用。

综上所属,在可以的条件,尽量用 HttpRuntime.Cache ,而不是用 HttpContext.Cache 。 

Cache有以下几条缓存数据的规则。

第一,数据可能会被频繁的被使用,这种数据可以缓存。
第二,数据的访问频率非常高,或者一个数据的访问频率不高,但是它的生存周期很长,这样的数据最好也缓存起来。
第三是一个常常被忽略的问题,有时候我们缓存了太多数据,通常在一台X86的机子上,如果你要缓存的数据超过800M的话,就会出现内存溢出的错误。所以说缓存是有限的。换名话说,你应该估计缓存集的大小,把缓存集的大小限制在10以内,否则它可能会出问题。

1.cache的创建

   cache.Insert(string key,object value,CacheDependency dependencies,DateTime absoluteExpiration,TimeSpan slidingExpiration)//只介绍有5个参数的情况,其实cache里有很几种重载
参数一:引用该对象的缓存键
参数二:要插入缓存中的对象
参数三:缓存键的依赖项,当任何依赖项更改时,该对象即无效,并从缓存中移除。 null.">如果没有依赖项,则此参数包含 null。
参数四:设置缓存过期时间
参数五:参数四的依赖项,如果使用绝对到期,null.">slidingExpiration parameter must beNoSlidingExpiration.">则 slidingExpiration 参数必须为 NoSlidingExpiration

2.销毁cache

cache.Remove(string key)//key为缓存键,通过缓存键进行销毁
3.调用cache
例如你存的是一个DataTable对象,调用如下: DataTable finaltable = Cache["dt"] as DataTable;
4.一般什么时候选用cache
cache一般用于数据较固定,访问较频繁的地方,例如在前端进行分页的时候,初始化把数据放入缓存中,然后每次分页都从缓存中取数据,这样减少了连接数据库的次数,提高了系统的性能。

///       /// 获取数据缓存      ///       /// 键      public static object GetCache(string cacheKey)      {          var objCache = HttpRuntime.Cache.Get(cacheKey);          return objCache;      }      ///       /// 设置数据缓存      ///       public static void SetCache(string cacheKey, object objObject)      {          var objCache = HttpRuntime.Cache;          objCache.Insert(cacheKey, objObject);      }      ///       /// 设置数据缓存      ///       public static void SetCache(string cacheKey, object objObject, int timeout = 7200)      {          try          {              if (objObject == null) return;              var objCache = HttpRuntime.Cache;              //相对过期              //objCache.Insert(cacheKey, objObject, null, DateTime.MaxValue, timeout, CacheItemPriority.NotRemovable, null);              //绝对过期时间              objCache.Insert(cacheKey, objObject, null, DateTime.Now.AddSeconds(timeout), TimeSpan.Zero, CacheItemPriority.High, null);          }          catch (Exception)          {              //throw;          }      }      ///       /// 移除指定数据缓存      ///       public static void RemoveAllCache(string cacheKey)      {          var cache = HttpRuntime.Cache;          cache.Remove(cacheKey);      }      ///       /// 移除全部缓存      ///       public static void RemoveAllCache()      {          var cache = HttpRuntime.Cache;          var cacheEnum = cache.GetEnumerator();          while (cacheEnum.MoveNext())          {              cache.Remove(cacheEnum.Key.ToString());          }      }

 

转载于:https://www.cnblogs.com/xianyv/p/10682438.html

你可能感兴趣的文章
人工智能实验报告一
查看>>
用LR12录制app,用LR11跑场景,无并发数限制,已试验过,可行!
查看>>
python 多线程就这么简单(转)
查看>>
oracle 简述
查看>>
ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
查看>>
Solr之java实现增删查操作
查看>>
httpClient连接工具类实测可用
查看>>
CDOJ 1965 连通域统计【DFS】
查看>>
飞机大战3-我的飞机
查看>>
c#接口
查看>>
MyEclipse部署Jboss出现java.lang.OutOfMemoryError: PermGen space
查看>>
ZOJ 1133
查看>>
HIVE和HADOOP的一些东西
查看>>
alibaba / zeus 安装 图解
查看>>
Planned Delivery Time as Work Days (SCN discussion)
查看>>
Ubuntu:让桌面显示回收站
查看>>
Android上传头像代码,相机,相册,裁剪
查看>>
git 安装体验
查看>>
Oracle 给已创建的表增加自增长列
查看>>
《DSP using MATLAB》Problem 2.17
查看>>