cache缓存

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

1、cache文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Caching;

namespace Standard.Helper
{
    public class 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, timeout, CacheItemPriority.NotRemovable, null);  
                //绝对过期时间  
                objCache.Insert(cacheKey, objObject, null, DateTime.Now.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());
            }
        }
    }
}

2、cache的使用

  //先查询是否存在相应名的缓存数据,不存在则增加

var getInfo = Cache.GetCache("_INFO");
if (getInfo == null)
{

DataTable _Info = SqlHlper.ExecuteDt(strSql);

//定义缓存的时间为20秒
Cache.SetCache("_INFO",j_Info, 20);

}

//将查询的所有的数据存放在cache中

DataTable dt_INFO = (DataTable)Cache.GetCache("_INFO");

//查询cache中所需的字段
DataTable dt_FF = dt_INFO.DefaultView.ToTable(true, new string[] { "code", "name" });

string J_AcInfo = "";
for (int i = 0; i < dt_FF.Rows.Count; i++)
{

var dr_AC = dt_INFO.Select("rcode='" + (string)dt_FF.Rows[i]["code"] + "'", "cdno");
foreach (DataRow row in dr_AC)
{}

}

posted @ 2019-11-07 09:21  天空之云  阅读(537)  评论(0编辑  收藏  举报