首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

【散300分】发布网站上的一个缓存类,希望大家多指教

2011-12-12 
【散300分】公布网站上的一个缓存类,希望大家多指教一开始我的网站上没有用缓存,很明细速度非常慢。用过缓存

【散300分】公布网站上的一个缓存类,希望大家多指教
一开始我的网站上没有用缓存,很明细速度非常慢。用过缓存之后速度明显好多了。

大家看看这几个方法,当初也是在网上学习之后的笔记,然后整理出来的一个类。

大家看看有什么不足,或需要改进的地方。 我的网站:我爱编码网

C# code
using System;using System.Collections.Generic;using System.Web;using System.Configuration;using System.Collections;/// <summary>///CacheHelper 的摘要说明/// </summary>public class CacheHelper{    #region 从配置文件中读取缓存时间    //缓存时间    private static string _CacheTime = string.Empty;    public static string CacheTime    {        get        {            try            {                _CacheTime = ConfigurationManager.AppSettings["CacheTime"].ToString();            }            catch (Exception)            {                _CacheTime = "0";            }            return _CacheTime;        }        set { _CacheTime = value; }    }    #endregion    public CacheHelper()    {        //        //TODO: 在此处添加构造函数逻辑        //    }    #region 插入Cache    /// <summary>     /// 插入Cache     /// </summary>     /// <typeparam name="T"></typeparam>     /// <param name="o"></param>     /// <param name="key"></param>     public static void Add<T>(T o, string key)    {        HttpContext.Current.Cache.Insert(            key,            o,            null,            DateTime.Now.AddMinutes(Convert.ToDouble(CacheTime)),  // Cache的缓存时间,通常建议配置在Config文件中             System.Web.Caching.Cache.NoSlidingExpiration);    }    #endregion    #region 删除指定的Cache    /// <summary>     /// 删除指定的Cache     /// </summary>     /// <param name="key">Cache的key</param>     public static void Clear(string key)    {        HttpContext.Current.Cache.Remove(key);    }    #endregion    #region 判断Cache是否存在    /// <summary>     /// 判断Cache是否存在     /// </summary>     /// <param name="key"></param>     /// <returns></returns>     public static bool Exists(string key)    {        return HttpContext.Current.Cache[key] != null;    }    #endregion    #region 取得Cache值,带类型 T    /// <summary>     /// 取得Cache值,带类型 T     /// </summary>     /// <typeparam name="T"></typeparam>     /// <param name="key"></param>     /// <param name="value"></param>     /// <returns></returns>     public static bool Get<T>(string key, out T value)    {        try        {            if (!Exists(key))            {                value = default(T); //                 return false;            }            value = (T)HttpContext.Current.Cache[key];        }        catch        {            value = default(T);            return false;        }        return true;    }    #endregion    #region 清除所有缓存    /// <summary>    /// 有时可能需要立即更新,这里就必须手工清除一下Cache     ///Cache类有一个Remove方法,但该方法需要提供一个CacheKey,但整个网站的CacheKey我们是无法得知的     ///只能经过遍历     /// </summary>    public static void RemoveAllCache()    {        System.Web.Caching.Cache _cache = HttpRuntime.Cache;        IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();        ArrayList al = new ArrayList();        while (CacheEnum.MoveNext())        {            al.Add(CacheEnum.Key);        }        foreach (string key in al)        {            _cache.Remove(key);        }    }    #endregion    #region 显示所有缓存    //显示所有缓存     public static string show()    {        string str = "";        IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();        while (CacheEnum.MoveNext())        {            str += "<br />缓存名<b>[" + CacheEnum.Key + "]</b><br />";        }        return "当前网站总缓存数:" + HttpRuntime.Cache.Count + "<br />" + str;    }    #endregion} 



[解决办法]

[解决办法]
缓存同步

缓存依赖
[解决办法]
接分接分
[解决办法]

[解决办法]
接分接分
[解决办法]
jf.....顺便学习一下
[解决办法]
你使用的是 .net 自带的缓存,应该将 缓存依赖项 的部分 添加到你的封装类中


[解决办法]
C# code
using System;using System.Collections.Generic;using System.Text;using System.Web;using System.Data;using System.Collections;using System.Text.RegularExpressions;using System.Web.Caching;namespace DotNet.Common{    /// <summary>    /// 缓存常用操作    /// </summary>    public class CacheUtil    {        public CacheUtil()        {            //            // TODO: 在此处添加构造函数逻辑            //        }        /// <summary>        /// 增加一个缓存对象        /// </summary>        /// <param name="strKey">键</param>        /// <param name="valueObj">值</param>        /// <param name="duration">以秒为单位</param>        /// <returns></returns>        public static bool Insert(string strKey, object valueObj, double durationSecond)        {            if (strKey != null && strKey.Length != 0 && valueObj != null)            {                //建立回调委托的一个实例                CacheItemRemovedCallback callBack = new CacheItemRemovedCallback(onRemove);                HttpContext.Current.Cache.Insert(strKey, valueObj, null,DateTime.Now.AddSeconds(durationSecond),System.Web.Caching.Cache.NoSlidingExpiration,                System.Web.Caching.CacheItemPriority.Default,                callBack);                return true;            }            else            {                return false;            }        }        /// <summary>        /// 判断缓存对象是否存在        /// </summary>        /// <param name="strKey"></param>        /// <returns></returns>        public static bool IsExist(string strKey)        {            return HttpContext.Current.Cache[strKey] != null;        }        /// <summary>        /// 读取缓存对象        /// </summary>        /// <param name="strKey"></param>        /// <param name="obj"></param>        /// <returns></returns>        public static object Read(string strKey)        {            //取出值            if (HttpContext.Current.Cache[strKey] != null)            {                object obj = HttpContext.Current.Cache[strKey];                if (obj == null)                {                    return null;                }                else                {                    return obj;                }            }            else            {                return null;            }        }        /// <summary>        /// 删除缓存对象        /// </summary>        /// <param name="strKey"></param>        /// <returns></returns>        public static void Remove(string strKey)        {            if (HttpContext.Current.Cache[strKey] != null)            {                HttpContext.Current.Cache.Remove(strKey);            }        }        /// <summary>        /// 根据设置的正则表达式清除缓存对象        /// </summary>        /// <param name="pattern">正则表达式</param>        public static void RemoveByRegexp(string pattern)        {            if (pattern != "")            {                IDictionaryEnumerator enu = HttpContext.Current.Cache.GetEnumerator();                while (enu.MoveNext())                {                    string key = enu.Key.ToString();                    if(Regex.IsMatch(key,pattern))                    {                        Remove(key);                    }                }            }        }        /// <summary>        /// 清除所有缓存对象        /// </summary>        public static void Clear()        {            IDictionaryEnumerator enu = HttpContext.Current.Cache.GetEnumerator();            while (enu.MoveNext())            {                Remove(enu.Key.ToString());            }        }        /// <summary>        /// 此方法在值失效之前调用,可以用于在失效之前更新数据库,或从数据库重新获取数据        /// </summary>        /// <param name="strKey"></param>        /// <param name="obj"></param>        /// <param name="reason"></param>        private static void onRemove(string strKey, object obj, CacheItemRemovedReason reason)        {        }    }} 


[解决办法]
分布式缓存
看看LTP的系统缓存介绍

[解决办法]
接分了在学下.
[解决办法]
小虎你空间在哪买的多少钱啊
[解决办法]
学习一下
[解决办法]
帮顶!
[解决办法]
我也去搞个网站耍耍,你UI要重搞下
[解决办法]

[解决办法]
必须狂顶狂学习小虎
[解决办法]
先收藏 ,再去看看 你的网站。
[解决办法]

探讨

真快,,怪不得你一个月能得4k+的技术分呢。。。

[解决办法]
呵呵。接分啊!!!
[解决办法]
写的不错
[解决办法]
jf.....顺便学习一下
[解决办法]
还没用过缓存呢~~
[解决办法]
kankan
[解决办法]
接分,学习!
[解决办法]
谢谢分享
[解决办法]
学习一下 接分
[解决办法]
学习一下 接分
[解决办法]
进来学习了~
[解决办法]
不错收了
[解决办法]
冒个泡,做个标
[解决办法]
你太厉害了 羡慕
[解决办法]
jf.....
顺便学习一下
[解决办法]
标记 学习
[解决办法]
mark 学习
[解决办法]
顶,真的学习到了
[解决办法]
C# code
Exists和Insert会不会有并发问题啊
[解决办法]
http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/5.gif
[解决办法]
学习了,多谢分享
[解决办法]
学习~
[解决办法]
jiejiejiejiejiejiejie
[解决办法]
wo ye lai jie fen a kanbudong a


[解决办法]
很不错。谢谢了。
[解决办法]
呵呵。。 又进了一次你的网站了。。
[解决办法]
学习了 接分
[解决办法]
我以后没事就跟踪你们的回复了,多学习你们这些高人的思路
[解决办法]
学习..
[解决办法]
不错嘛
[解决办法]
学习路过此地,顶下贴,能否打酱油?
[解决办法]
为了分数而来!!
[解决办法]

[解决办法]
恩 不错,学习下

至于阿非说的 我还没接触过。

可否给个实例
[解决办法]
用了缓存,打开网页速度有改善吗,我想试用试用你提供的(本人笨拙,不会)

csdn.net为什么每回复一次都要重新登录?十分麻烦!
[解决办法]
看看。
[解决办法]
好东东啊,谢谢
[解决办法]

探讨
⿶⿶⿶⿶

[解决办法]
你的网页浏览速度相当的快啊。

问你几个问题哦:
1、空间和域名在哪里买的呀?
2、200块?额,支持3.5?
[解决办法]
接分来了
[解决办法]
看了。
[解决办法]
探讨
引用:
小虎你空间在哪买的多少钱啊

便宜,+域名好像不到200吧,广东的

[解决办法]
这个以后一定有用,先收下啦,谢谢啊!

热点排行