1
chone 2011-04-13 21:17:45 +08:00
1,有关系,本地缓存虽然是浏览器来实现的,但是是否缓存已经何时更新是由 Header 的相关参数来控制的。
2,Expires就是1里说的相关参数。 3,基本上是这样。 4,squid主要是用来做代理的。 不要把浏览器缓存,和服务器的缓存混在一起,这两个不是一个东西,前者是在client端缓存文件,后者是在sever缓存数据(一般用来减少数据库的访问)。他们没有直接联系。 |
2
SuperOS 2011-04-13 21:21:02 +08:00
再多科普点撒
squid / memcached |
3
levon OP @chone 感谢,
再问个问题,比如就拿blog来说,每篇blog,一整个网页,这样一个页面级的(包括页面中包含的css, js, image等元素)要做缓存一般是如何实现呢,用Memcached这个级别好像不符合(适合的是从数据库读取blog内容),而页面级更多是基于把硬盘的数据读到内存缓存着,这种级别的怎么做到呢 |
4
TheOnly92 2011-04-13 21:42:39 +08:00
一般个别文件 (css, js) 都是让客户端缓存,这个可以在 apache 或者其他 webserver 设置。memcache 一般用来缓存数据查询等经过处理的数据。
|
6
levon OP @TheOnly92 这样一个场景,比如我刚访问了一个blog/foo.php,这个页面是诸多次读取数据库的结果,我想等第二次访问,第三次访问的人不要读数据库(由于对象很多,用memcache来存很麻烦),直接从内存中读取整个页面的内容,这种解决方案是什么呢。
|
7
shanghaikid 2011-04-13 21:58:14 +08:00
还有html5 localstorage 可以用来做缓存 你可以去看看google mobile 的源码,不过这个也是前后端配合才能实现的
|
8
TheOnly92 2011-04-13 22:00:55 +08:00
这还得看,有些地方如果要花很多时间处理就最好缓存,有些地方不需要的话也不用缓存。比较理想的缓存对象是大家都会用到的,而且要花很多时间处理的查询。
|
9
levon OP 还有一点,我曾经在的一个公司,公司网站是.net做的,托管的是windows server,但是公司还有5,6十台的Linux服务器,那linux在这扮演什么角色呢
|
10
chone 2011-04-13 22:06:04 +08:00
@levon 这样只能用memcache这样的服务端缓存,要么就是用squid来实现的缓存服务器。你可以把最后生成的数据或者是页面放到服务器缓存里。
|
11
hooopo 2011-04-13 22:08:38 +08:00
这本书对前端工程师很有用:http://book.douban.com/subject/3132277/
|
12
hooopo 2011-04-13 22:26:58 +08:00
3.其实把对象存在db/文件系统/memcached的前提是对象需要能够被序列化和反序列化的。虽然也叫内存,但是和应用程序的环境是隔离的。memcached的优点是get/set速度快,并且可以分布式。缺点是不能持久化。
|
13
TheOnly92 2011-04-13 22:31:41 +08:00
那要看在 linux 装了什么软件吧。
|
14
hooopo 2011-04-13 22:38:35 +08:00
@levon 你上面说的那个场景用解决方案很多的。用memcache也很简单:把第一次生成的整个页面存到里面。第二次读取的时候直接从memcache里面取数据就是了。至于清理缓存方式是基于时间还是基于model这个由你的业务逻辑决定。
|
16
icyflash 2011-04-13 23:52:00 +08:00
会在写入后,立即通知缓存更新
|