Step1数据系统技术(4.采用服务器端文件缓存)

前一章介绍了Cache和http状态码304的技术,这属于服务器端文件缓存,使用该技术可以灵活的将每一个用户访问服务器的次数和字节数减少到最低。

不过有这样一个问题存在,就是上面的缓存都是针对单个用户的,如果该用户通常在缓存时间内只访问该文件一次,是没有效果的,因此就算这个文件每天被再多的用户访问,也起不到缓存效果,而这种情况下需要使用服务端缓存。

使用服务端缓存的理由很多,我使用的主要理由是每个页面生成对服务器性能的要求过大,因为每个页面生成的过程序需要多次访问数据库,并有可能需要从别的来源获取数据,而这些都是对性能影响很大的部分,而实际上,1000个用户访问的同一个页面,服务器返回的内容是相同的,这种情况下服务器生成1000次页面是完全不可取的,如果只在该页面初次被访问的时候生成一遍,而在一定时间内该页面被再次访问直接使用缓存,将会获得较大的服务器性能提升。

我的服务器缓存过程是这样的:当用户访问一个页面的时候(假设不考虑客户端缓存,因为本章讲的是服务端缓存),首先将该URL映射为硬盘上的的一个文件路径,检查该文件是否存在。如果存在,则检查该文件的最后修改日期,如果该文件存在并且还没有过期,则直接返回该文件内容,而不需要进行数据库操作;如果文件不存在或已经过期,则生成文件内容保存到相应的文件,再返回该文件内容。

这样做有几个好处:

1.并不是所有的文件都预先生成缓存,节省磁盘空间,而且基本上不需要手工干预

2.不需要建立缓存数据库,因为我认为,只要涉及到访问数据库,就会造成性能和稳定性问题,因为数据库可能是在另一台机器上,我记得有一次我的数据库崩溃了,而我发现当天网站70%的访问还是正常的,因为常被访问的页面已经被缓存了。

3.缓存访问快,因为判断文件是否存在和文件的时间是很快的过程,而且,在大多数的程序语言之中,直接将一个文件返回到浏览器也是很方便的过程

这样做也有几个缺点:

1.如果有人攻击或者遍历你的网站的页面,网站的所有页面会很快的被生成,硬盘的空间会急剧增加

2.缓存没有自动清除的功能,也就是说,如果要节省空间,可能需要手工执行一个程序,这个程序自动在缓存文件夹之中找到过期的文件并删除

总体上来讲,根据页面生成过程的复杂度和数据库等页面生成模块的稳定性来决定是否使用这种服务器端缓存,是很有作用的。

时间: 2024-08-31 02:44:02

Step1数据系统技术(4.采用服务器端文件缓存)的相关文章

Step1数据系统技术(0.开篇介绍)

好久没有写文章了,前天写了一篇关于Google的介绍的文章,也只是随便的写一下,不过眼下我准备写一个系列文章,来介绍我在Step1网站开发上的一些心得和技术,包括相关的代码. 这一系列文章介绍的技术主要来自www.step1.cn的两个栏目地名信息系统和火车运行图,您最好先浏览一下这两个栏目,这样才能够更加了解我的设计思路. 在开始之前,我来简单的说明一下这两个系统的共同点,以让大家了解究竟什么样的系统更适合使用我介绍的技术. 第一,该系统必须有一套数据,而且数据的容量也要大一点,要不然使用这些

Step1数据系统技术(5.使用GZIP技术优化文件缓存)

在上面的一篇,我们讲到了服务器端的缓存,我的地名信息系统有70万个页面,生成该页面的过程需要我从远程的数据库加载5个SQL数据返回的内容,还有RSS格式的新闻,因此生成一个页面是很困难的,因此我使用了服务端缓存技术使性能获得了大幅的提升,不过,又遇到了新的关于硬盘空间和流量的问题. 网站的70万个地名当然不会一天之内都会被访问,不过我的网站该栏目日访问量大约为30000,考虑到重复的访问,假设只访问了10000个地名(实际上是不只的,因为地名的访问很零散),那就是会有10000个缓存文件被生成,

Step1数据系统技术(3.使用浏览器Cache和http状态码304实现的客户端缓存)

实在抱歉,因为本来这个系列应该早就应该写完的,不过在我写了两章之后,没有过多久,我的网站就崩溃了,崩溃的原因是有人试图从我的网站抓取数据,从而造成了网站数据库的频繁访问,如果大家看过我以前的几篇,应该知道发生这样的事情同样会造成服务器缓存文件过多,因为我使用的是虚拟主机,因此,服务器就崩溃了.因此我觉得这个系统还存在缺陷,因此暂时没有继续介绍(当然到现在也没有改善多少),之后就是春节,春节之后我就开始找工作,而且也一直没有心情来写这个,因此拖延了很久,到现在,我终于觉得不好意思了,决定不管是否完

Step1数据系统技术(1.基于404错误的URL重写技术)

现在第一篇,讨论我的网站之中使用的URL重写技术,实际上,该技术并不是我编写的,可能有用户能够记得,我的网站www.step1.cn原来就是一个博客,那个时候采用的系统是博客园提供的cnblogs程序(我将这个程序改装成能够在当时的虚拟主机上运行,可花了不少功夫),后来我将博客迁到这里之后,对Step1.cn进行大的改版,当时我实在舍不得这套博客程序之中使用的URL重写的技术,因此专门的从那个cnblogs程序之中将相关的代码从其中拆分出来成一个DLL类,在我的网站使用URL重写技术. 当时由于

Step1数据系统技术(2.XML+XSLT的页面生成机制)

在本系统之中,网站的主体页面并不是通过普通的aspx返回方式返回的,而是采用一种XML+XSLT的形式,来自生成,这是我个人比较喜欢的方式,这种方式在这个系统之中有着更好的优势,我现在将优势列举几条: 1.完整的实现数据和表现形式的分离,数据完全在XML文件之中实现,而页面的表现的形式完全用XSLT实现,这样使程序的结构清晰简单,易于维护: 2.可以随意的选择将结果输出到文件或者Response: 3.XSLT可以自动的压缩HTML代码,生成紧凑,不易阅读而不影响浏览器解析的代码,你在XSLT文

Step1数据系统技术(6.汉字URL路径的处理和编码)

其实我挺不想写这一章的,因为直到现在,我还经常为编码的事情弄得云里雾里,不过考虑到我在之前的这个文章系列的目录里面已经列出了这个主题,如果不写有欺骗的嫌疑,想想还是写吧,反正没有谁把我当作一个权威的. 编码问题向来很复杂,我却不愿意向复杂了讲,我只从比较常见的讲. 编码,实际上是一个字符串的表达方式,通常从URL编码来讲,我们最常见到的编码有两种:第一种是GB2312编码,这是百度搜索使用的一种编码形式,例如你在百度搜索一个"你好",你会看到搜索结果网址是http://www.baid

技术干货:使用静态缓存提升网站性能的五种方法!

本文作者: 乔锐杰 现担任上海驻云信息科技有限公司运维总监/架构师.曾任职过黑客讲师.java软件工程师/网站架构师.高级运维.阿里云架构师等职位.维护过上千台服务器,主导过众安保险.新华社等千万级上云架构.在云端运维.分布式集群架构等方面有着丰富的经验. 以下正文 上次写了一篇数据库缓存,由于快餐式的风格,遭到了广大读友的吐槽.上篇风格有点 " 虚 ",我本身是一个技术控,偏向经验/干货的分享,本文主要描述静态缓存方面的一些心得及分享.作为系列二,有所不足之处,依旧希望大家踊跃&qu

php缓存技术详细介绍及php缓存实现代码

数据缓存:这里所说的数据缓存是指数据库查询PHP缓存机制,每次访问页面的时候,都会先检测相应的缓存数据是否存在,如果不存在,就连接数据库,得到数据,并把查询结果序列化后保存到文件中,以后同样的查询结果就直接从缓存表或文件中获得. 用的最广的例子看Discuz的搜索功能,把结果ID缓存到一个表中,下次搜索相同关键字时先搜索缓存表. 举个常用的方法,多表关联的时候,把附表中的内容生成数组保存到主表的一个字段中,需要的时候数组分解一下,这样的好处是只读一个表,坏处就是两个数据同步会多不少步骤,数据库永

app-Android 文件缓存策略

问题描述 Android 文件缓存策略 需求是这样的: 打开Android app访问服务器端的页面,第一次访问服务端,第二次就可以直接读缓存:在服务端有数据更新的时候,可以定时的更新,清除缓存,重新访问服务端的页面,谁有完整的demo(ps:使用文件缓存的策略),谢谢! 解决方案 莫有人知道吗?急用,有个案例参考下