在小型Web系统中使用缓存加速访问
来源:互联网 发布:鑫众棋牌源码 编辑:程序博客网 时间:2024/05/22 00:49
在高并发的现代Web系统中,缓存体系是绕不开的话题。一直以来我们开发的系统处于内网环境中,而且服务器资源相对负载来说比较富裕,从未使用缓存。大型的Web系统往往会使用MemCache,Redis等缓存数据库来加速访问,还有诸如全站静态化和CDN等技术。而受制于技术复杂度。小型Web使用.NET自带的缓存技术,也可以非常好的提高访问速度。
在油水井图片库这个项目中,由于在模糊查询中不当的应用了Count()方法。导致模糊查询偶尔会失去响应。于是在这个系统中加了一层简单的缓存。
缓存本质很简单,就是将原始数据预读到一个可以高速访问的区域一般就是内存中。
使用缓存的代价就是要维护原始数据与缓存的同步,在做各种增删改操作的时候需要一并更新缓存。缓存可以分为页面/文件缓存和数据缓存。
ASP.NET MVC对.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
- 在小型Web系统中使用缓存加速访问
- 在小型OA系统中使用Java发送邮件
- 在系统中使用缓存
- 大型web系统中缓存的使用
- 大型web系统中缓存的使用
- Web缓存加速指南
- Web缓存加速指南
- SQLite for uClinux(一个可以在嵌入式系统中使用的小型数据库)
- zz通过RamDisk加速小型数据库访问速度
- 基于反向代理的 Web 缓存加速--可缓存的 CMS 系统设计
- 基于反向代理的Web缓存加速——可缓存的CMS系统设计
- [转]基于反向代理的Web缓存加速 ——可缓存的CMS系统设计
- 基于反向代理的Web缓存加速——可缓存的CMS系统设计
- 基于反向代理的Web缓存加速——可缓存的CMS系统设计
- 基于反向代理的Web缓存加速??可缓存的CMS系统设计
- [转]基于反向代理的Web缓存加速 ——可缓存的CMS系统设计
- 基于反相代理的Web缓存加速——可缓存的CMS系统设计
- 基于反相代理的Web缓存加速——可缓存的CMS系统设计
- Lucene学习笔记之(一)简介和向文档写索引并读取文档
- 暑假集训-训练6 动态规划初步
- CentOS中由一般用户切换为root用户
- java之static的应用
- Failed to connect to 127.0.0.1:27017, reason: errno:10061 由于目标计算机积极拒绝,无法连接。
- 在小型Web系统中使用缓存加速访问
- HDU - 5775 Bubble Sort(树状数组)
- 杭电-1241 Oil Deposits(广搜)
- 面经 汇总
- 12346
- Python案例-网络编程-使用RabbitMQ实现RPC简易分享
- jQuery动画效果(show与hide/toggle/slideUp/slideToggle/fadeIn/fadeTo)
- 知识点
- HDU1312 BFS-Numerically Speaking