在小型Web系统中使用缓存加速访问

      在高并发的现代Web系统中,缓存体系是绕不开的话题。一直以来我们开发的系统处于内网环境中,而且服务器资源相对负载来说比较富裕,从未使用缓存。大型的Web系统往往会使用MemCache,Redis等缓存数据库来加速访问,还有诸如全站静态化和CDN等技术。而受制于技术复杂度。小型Web使用.NET自带的缓存技术,也可以非常好的提高访问速度。
       在油水井图片库这个项目中,由于在模糊查询中不当的应用了Count()方法。导致模糊查询偶尔会失去响应。于是在这个系统中加了一层简单的缓存。
       缓存本质很简单,就是将原始数据预读到一个可以高速访问的区域一般就是内存中。
       使用缓存的代价就是要维护原始数据与缓存的同步,在做各种增删改操作的时候需要一并更新缓存。缓存可以分为页面/文件缓存和数据缓存。
       ASP.NET MVC对.NET缓存进行了一层包装,可以很优雅的对页面进行缓存。缓存数据代码如下:
     
    public class CacheHelper
    {
        /// <summary>
        /// 获取数据缓存
        /// </summary>
        /// <param name="CacheKey">键</param>
        public static object GetCache(string CacheKey)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            return objCache[CacheKey];
        }

        /// <summary>
        /// 设置数据缓存
        /// </summary>
        public static void SetCache(string CacheKey, object objObject)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Insert(CacheKey, objObject); //永不过期
        }

        /// <summary>
        /// 设置数据缓存
        /// </summary>
        public static void SetCache(string CacheKey, object objObject, TimeSpan Timeout)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Insert(CacheKey, objObject, null, DateTime.MaxValue, Timeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);
        }

        /// <summary>
        /// 设置数据缓存
        /// </summary>
        public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);
        }

        /// <summary>
        /// 移除指定数据缓存
        /// </summary>
        public static void RemoveAllCache(string CacheKey)
        {
            System.Web.Caching.Cache _cache = HttpRuntime.Cache;
            _cache.Remove(CacheKey);
        }

        /// <summary>
        /// 移除全部缓存
        /// </summary>
        public static void RemoveAllCache()
        {
            System.Web.Caching.Cache _cache = HttpRuntime.Cache;
            IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
            while (CacheEnum.MoveNext())
            {
                _cache.Remove(CacheEnum.Key.ToString());
            }
        }
    }
  

由于我们的缓存是后加的,因此需要在某处执行一个初始化的过程。结果发现,在内存中初始化缓存的执行时间长达2分钟!以至Ajax请求超时。最后解决了这个问题。当缓存初始化成功后,模糊查询的执行速度得到了很大提升。我们把两个程序发布到服务器的不同端口上,在其他外部条件完全一致的情况下对访问时间进行了比较:

     未使用缓存之前:

   

在实测中发现请求页面时,速度几乎没有提升。可能是因为页面本身就非常简单,提速不明显。而请求数据时速度提升非常大。通过图片可以很清楚的看到,加上缓存后,响应时间下降了80%-90%,某些情况下甚至下降到了5%。达到了预期目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值