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

来源:互联网 发布:鑫众棋牌源码 编辑:程序博客网 时间:2024/05/22 00:49
      在高并发的现代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
原创粉丝点击