zoukankan      html  css  js  c++  java
  • c#中的Cache缓存技术

    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一般用于数据较固定,访问较频繁的地方,例如在前端进行分页的时候,初始化把数据放入缓存中,然后每次分页都从缓存中取数据,这样减少了连接数据库的次数,提高了系统的性能。

        /// <summary>  
        /// 获取数据缓存  
        /// </summary>  
        /// <param name="cacheKey"></param>  
        public static object GetCache(string cacheKey)  
        {  
            var objCache = HttpRuntime.Cache.Get(cacheKey);  
            return objCache;  
        }  
        /// <summary>  
        /// 设置数据缓存  
        /// </summary>  
        public static void SetCache(string cacheKey, object objObject)  
        {  
            var objCache = HttpRuntime.Cache;  
            objCache.Insert(cacheKey, objObject);  
        }  
        /// <summary>  
        /// 设置数据缓存  
        /// </summary>  
        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,  new TimeSpan(0, 0, timeout), CacheItemPriority.NotRemovable, null);  
                //绝对过期时间  
                objCache.Insert(cacheKey, objObject, null, DateTime.UtcNow.AddSeconds(timeout), TimeSpan.Zero, CacheItemPriority.High, null);  
            }  
            catch (Exception)  
            {  
                //throw;  
            }  
        }  
        /// <summary>  
        /// 移除指定数据缓存  
        /// </summary>  
        public static void RemoveAllCache(string cacheKey)  
        {  
            var cache = HttpRuntime.Cache;  
            cache.Remove(cacheKey);  
        }  
        /// <summary>  
        /// 移除全部缓存  
        /// </summary>  
        public static void RemoveAllCache()  
        {  
            var cache = HttpRuntime.Cache;  
            var cacheEnum = cache.GetEnumerator();  
            while (cacheEnum.MoveNext())  
            {  
                cache.Remove(cacheEnum.Key.ToString());  
            }  
        }  
  • 相关阅读:
    母牛的故事
    python 实现计算数独
    java程序计算数独游戏
    《深入理解Java虚拟机》笔记7
    安装red5 1.0.1版本Java_home不能用Java7
    计算流图中的循环集合
    《深入理解Java虚拟机》笔记5
    《深入理解Java虚拟机》笔记4
    n的阶乘-编程2.md
    爬楼梯问题-斐波那契序列的应用.md
  • 原文地址:https://www.cnblogs.com/xianyv/p/10682438.html
Copyright © 2011-2022 走看看