ASP使用缓存方法及缓存类详解
发布时间:2008-02-15 08:36:00
一、何谓ASP缓存/为什么要缓存
当你的web站点采用asp技术建立的初期,可能感觉到的是asp * 页技术带来的便利性,以及随意修改性、自如的http控制。但是,随着访问量的增加,你一定会发现自己的站点访问速度越来越慢,IIS重新启动得越来越频繁。接下来,你一定想优化asp,诸如更换性能更优异的数据库、建立索引、编写存储过程等等。这些措施有些不需要增加成本压力,有些则成本压力很大(譬如丛access到SQL),而且效果还不一定。
面对web访问压力,我认为最经济的办法是利用缓存优化技术来实现缓解web的服务压力。
Web访问量增加通常意味着以下资源需求的快速增长:
1、 网卡流量增加,需要消耗更多的CPU处理网络流量和网络I/O线程。
2、 需要更频繁的打开/关闭数据库连结(如果使用数据库技术—通常asp都会采用数据库作为数据存储),严重消耗资源的事物数量、以及事务相互竞争资源引起的死锁、会增加网络I/O或者CPU消耗。
3、 如果采用session的话,IIS为了维持状态,会消耗更多内存,而内存消耗可能会引发物理内存不够,引起物理内存同辅存间的频繁交换,从而引起代码执行的停顿,web响应阻滞。
4、 由于访问的不到及时响应,会引起网页访问故障,导致用户刷新,从而加剧CPU、内存等资源需求。
实际上,考虑通常的web应用程序,很多时候的动态代码执行是不必要的。
二、asp缓存的分类
擅自总结,asp的缓存可以分为两类:
1、 文件缓存
所谓文件缓存,就是根据逻辑判断,一段时间内某个asp的特定执行将不会有很大的变动,因而将内容以静态html的形式存放,然后以web的重定向技术让客户端访问静态文件,以达到减少CPU、数据库资源等的需求。这样的应用很多,譬如很多论坛就是在回复贴子的时候将整个贴子重新生成一个静态文件,然后进行重定向的,例如 donews.com的论坛。该成静态还有一个副作用(好处)--可以很容易被google等搜索引擎收录。一些所谓新闻发布系统的都采用了此技术。
2、 文件片断缓存
所谓文件缓存,也是基于逻辑判断,某部分数据(通常是需要消耗资源的大容量数据库查询取得)在一定时间内不会改变,所以我们可以将这些数据利用文件的形式进行存储,当需要时候,可以通过读取文件来获取数据,避免增加数据库的负担。例如,我们通常将一些数据以xml格式存储,然后利用xslt技术实现显示(xml处理通常需要大量CPU资源,所以通常是IE直接读取xml到客户端在客户的CPU上进行处理)。CSDN的论坛就是这样处理的。
3、 主存缓存
除此之外,还可以考虑在内存中处理缓存,将需要及时响应的内容存储在内存中,一旦访问需求,立即从快速的贮存中输送出去。如果极大量的访问需求集中在几个少量的页面或者主存足够多,我想采用主存缓存一定可以大幅度提高web访问性能。
三、如何实现/使用缓存
实现缓存需要考虑以下问题:
1、 哪些页面会在短时间内不会改变?
分析自己的站点,这样的页面很多。譬如一个站点通常都有新闻资讯类的栏目,这些栏目通常都是站点维护人员在一天的某个时间发布资料,之后很少改动页面。那么这些页面就适合于采用静态文件缓存。实际上,所谓新闻发布系统就是这么做的,那么那也可以参考这些系统的思想改造自己的原有动态asp页面。
2、 那些页面针对全部访问者都采用同一个逻辑生成(也就是不区分访问者)。
除了新闻资讯之类的栏目所有访问者都看一个界面外,论坛等消耗资源的应用一般也可以设计成统一逻辑生成(同一个贴子,张三李四看的都一样),针对这类应用页面我们也可以采用静态缓存来实现。也可以考虑将数据片断化,利用脚本技术在服务器处理能力之外也就是客户端浏览器进行处理。
3、 采用缓存的代价和收获。
主要就是“空间换(响应)时间”。利用缓存技术将之后频繁需要的内容进行预处理,使之提高web服务器响应能力,更重要赢得访问者的欢心。
代价就是web空间需求增加,同时又可能影响到访问效果。
但我认为适当的缓存,是利大于弊的。
4、 那些地方不适宜采用缓存
动态查询页面,每个人的查询内容不一样,所以显示结果不大一样,所以不大可能将查询结果生成缓存,所以采用缓存较为复杂且缓存利用率底下,造成管理成本上什(假设你缓存了1000个查询关键字,那么管理这些关键字同缓存的对应也是麻烦事)。


猜你喜欢
- 应用场景:工作中经常遇到大量的数据需要整合、去重、按照特定格式导出等情况。如果用 Excel 操作,不仅费时费力,还不准确,有么有更高效的解
- 1.装饰器通用模型def wrapper(fn): def inner(*args, **kwargs):&nbs
- 目录selenium模块selenium基本概念基本使用基于浏览器自动化的操作selenium处理iframe:selenium模拟登陆QQ
- 今天我们学习如何配置url、如何传参、如何命名、以及渲染的方式,内容大致有以下几个方面。创建视图函数并访问创建appdjango中url规则
- pydantic-resolve 解决嵌套数据结构的生成和其他方案的比较pydantic-resolve和GraphQL相比GraphQL的
- 前言:自增列可使用 auto_increment 来实现,当一个列被标识为 auto_increment 之后,在添加时如果不给此列设置任何
- Go语言中 sync 包里提供了互斥锁 Mutex 和读写锁 RWMutex 用于处理并发过程中可能出现同时两个或多个协程(或线程)读或写同
- 基于的phantomjs的自动化,会出现1.flash不支持2.部分基于view的按钮点不到,部分按钮是基于flash的(尤其是在于上传按钮
- 参数Parameters解析响应时间resolveTimeout 数据类型:长整型。简单地说就是程序对目标主机的名字解析解析的一个过程时间。
- 前言事务性数据字典与原子DDL,是MySQL 8.0推出的两个非常重要的新特性,之所以将这两个新特性放在一起,是因为两者密切相关,事务性数据
- 1.图片分类网络这是一个二分类网络,可以是alxnet ,vgg,resnet任何一个,负责对图片进行二分类,区分图片是真实图片还是生成的图
- python open() 函数以指定模式打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。w 模
- 1、Function 函数编程中,需要重复写的功能,可以包装成一个函数1)定义函数定义函数之前,实现给一个字符串增加前缀和后缀的操作:f1
- 一、文件内容的分发 应用场景:分批读取共有358086行内容的txt文件,每取1000条输出到一个文件当中# coding=utf-8# 分
- Python中支持Convex Optimization(凸规划)的模块为CVXOPT,其安装方式为:pip install cvxopt一
- 绘制一个菱形四边形,边长为 200 像素。方法1和2绘制了内角为60和120度的菱形,方法3绘制了内角为90度的菱形。方法1
- 一、引言在编写调试Python代码过程中,我们经常需要记录日志,通常我们会采用python自带的内置标准库logging,但是使用该库,配置
- 前言本人在学习go-micro中,用到Makefile,本人之前用过Makefile,但是不知道为什么这会就不能用了,我找了好多教程都没能解
- 此处为mysql驱动mysql.data.dll注意:此处X86版本较多,X64版本较少X64:X86:Vs添加引用过程:总结以上所述是小编
- 在日常的编程中,我经常需要标识存在于文本文档中的部件和结构,这些文档包括:日志文件、配置文件、定界的数据以及格式更自由的(但还是