为什么要使用缓存?
1、 减少数据库访问,降低数据库压力
2、加速系统访问速度,提升系统性能
二、常用的几种缓存(这里说的均为数据缓存)
1、文件缓存(以文件形式存在磁盘上)
2、Memcache(保存在内存里)
3、前端代理
4、Mysql内存表(这个算不上缓存)
三、比较几种缓存的效率,选出适合自己系统用的缓存架构
1、文件缓存
常用的文件缓存包括:zend cache,各种框架所带的缓存,smarty所带的缓存。优点:静态化页面使得访问速度加快,降低服务器的压力。缺点:对于实时性数据或是不断变化的数据会造成数据不同步,当然你会说那我每次可以修改相应的缓存或是删除了再建立,但是这么做一定会造成io的开销,还有就是不要存太大文件,太大文件读取的时候会造成系统开销很大,也不要存太小的文件,太小的文件会造成磁盘碎片。
2、Memcached
Memcached作为php5的一个新的扩展缓存类,是一个分布式内存缓存系统。Memcached是“分布式”的内存对象缓存系统,那么就是说,那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源,即使是UNIX本地连接也一样。在我之前的测试数据中显示,memcached本地读写速度要比直接PHP内存数组慢几十倍,而APC、共享内存方式都和直接数组差不多。可见,如果只是本地级缓存,使用memcached是非常不划算的。
Memcahce如何部署:
首先启动n个memcache进程,这些进程可以在不同的server的不同端口上.然后使用perl的api可以方便的一次链接多个memcache,存储读取机制不明.不久找到php的一个MemcachedClient类,基本上就是perl里api的再实现.它使用的fscokopen或者socket系列function来直接读取memcache----这说明只要清楚memcache的网络协议,你甚至不用装什么php的memcacheextenstion.看了这个类的实现,基本上弄清楚,它的分布式应用差不多就是将不同的key保存在不同的memcachedaemon,不会保留多个副本,也就不存在多memcache同步的问题了。
memcached也经常作为服务器之间数据共享的存储媒介,例如在SSO系统中保存系统单点登陆状态的数据就可以保存在memcached中,被多个应用共享
优点:通过简单的配置,可以把数据放到另一台机子的缓存,通过socket读取。这种方法比磁盘存储要快很多,减少io读取,提升web的性能。
缺点:如果memcache机子重启,那么所有缓存数据将丢失,不适宜存储永久数据和数据量大的数据。
总结:memcached使用内存并不会得到成百上千的读写速度提高,它的实际瓶颈在于网络连接,它和使用磁盘的数据库系统相比,好处在于它本身非常“轻”,因为没有过多的开销和直接的读写方式,它可以轻松应付非常大的数据交换量,所以经常会出现两条千兆网络带宽都满负荷了,memcached进程本身并不占用多少CPU资源的情况。总结:
缓存的目的:让被期待性高的数据暂存入性能相对好的存储设备以达到使系统性能提升的目的。任何缓存,无论页面、数据、对象等都是按照上面描述来进行策略选择的。也就是说,不管需要缓存的是什么,你只用选出被期待性高的,然后把他们存入性能相对较好的存储设备就行了。最重要的是找出你系统的瓶颈,然后采用不同的缓存。
全局缓存策略和局部不缓存
来源:昆明多彩网络公司 日期:2011-04-01 阅读: 380 发表评论
缓存不但能够极大的提升网站的速度,而且能提高网站的安全性能,但是弊端是更新的不及时,这里说的是在全局缓存中使用不缓存局部来解决更新不及时的问题。
应该被缓存的地方应当遵循一个原则就是内容不能太频繁更新,同时承载着很多用户的访问, 这里以B2C商城为例:
一、需要被缓存的页面:
1、商品的列表,一个B2C商城的产品更新应该不是很频繁,产品列表页是很多人关注的页面,是需要缓存的第一目标。
2、商品的详细页面,理由 同上。
3、网站的首页,作为网站流量的导入口,必须得缓存起来,让浏览者快速的打开我们的网站,提升信任感。
4、不常更新的页面,如关于我们、联系方式、支付方式等等单一文字页面。
二、不能缓存的地方的条件是该区域是需要因人而异和被频繁更新的地方,局部不能缓存的地方一般有:
1、会员登陆和资料显示区域,因为该区域会因用户的不同而不同,显然不能使用缓存。
2、个人会员中心,包含以往订单、红包、配送等。
3、非常重要的购物车功能,需即时更新,无需缓存。
4、历史浏览记录,每个浏览者有着不一样的浏览历史。
5、当前时间区域,如果将这个加入缓存的话,时间就会停止在生成缓存的一瞬间。
通过合理搭配全局缓存和局部不缓存能够很好的提升网站的运行效率,在最小的硬件成本下获得最好的网站速度性能。]]
smarty的缓存开关变量是$caching,默认是关闭状态,值为false,一般是在调试状态下就关闭,但是真正投入到生产环境的时候是需要开启缓存的,能够极大提升网站的打开速度。
但是smarty的缓存也是一把双刃剑,在缓存前台页面的同时,如果后台数据更新的非常频繁,如果缓存设置不当的话,前台将无法及时更新。
这里介绍另外一个smarty的变量:$compile_check(编译检查变量),如果开启此变量,smarty会检查模板文件是否改动过,如果模板改动过的话smarty就会重新生成模板编译文件,但是否会生成缓存文件需要看两个方面,第一是smarty是否开启了缓存,第二是对应的缓存文件是否存在着。
下面我们列举几个可能性:
1、$compile_check开启,$caching开启,同时设置$caching失效时间为3600秒(即一小时)
a.如果只是数据库更新了内容,模板无改动,不会更新模板编译文件(就算删除模板编译也不会重新生成,模板编译步骤直接跳过),在这3600中,前台页面无法体现出数据更新后的效果;
b.如果更新了模板文件,smarty只会重新生成模板的编译文件,但是缓存依然不会重新生成(除非将之前生成的缓存文件删除);
c.如果模板和数据库都有更新,效果同前一个效果,只是重新生成模板的编译文件,前台效果需要3600秒后才会更新(除非将之前生成的缓存文件删除)。
2、$compile_check关闭,caching开启,同时设置$caching失效时间为3600秒(即一小时)
a.如果只是数据库更新了内容,模板无改动,在这3600中,前台页面无法体现出数据更新后的效果;
b.如果更新了模板文件,smarty不会生成模板的编译文件,缓存不会重新生成(除非将之前生成的缓存文件删除);
c.如果模板和数据库都有更新,模板和缓存都不会重新生成,删除之前生成的缓存后可以重新生成缓存,但是模板编译文件依旧不会生成。
综合上述条件,我们在网站制作中,可以采用这样的策略:
第一种策略:如果为了达到更大的性能,可以将$compile_check关闭,caching开启;
第二种策略:如果只是想仅达到mvp代码和模板分离的效果,可以将$compile_check开启,Caching关闭即可。
1、 减少数据库访问,降低数据库压力
2、加速系统访问速度,提升系统性能
二、常用的几种缓存(这里说的均为数据缓存)
1、文件缓存(以文件形式存在磁盘上)
2、Memcache(保存在内存里)
3、前端代理
4、Mysql内存表(这个算不上缓存)
三、比较几种缓存的效率,选出适合自己系统用的缓存架构
1、文件缓存
常用的文件缓存包括:zend cache,各种框架所带的缓存,smarty所带的缓存。优点:静态化页面使得访问速度加快,降低服务器的压力。缺点:对于实时性数据或是不断变化的数据会造成数据不同步,当然你会说那我每次可以修改相应的缓存或是删除了再建立,但是这么做一定会造成io的开销,还有就是不要存太大文件,太大文件读取的时候会造成系统开销很大,也不要存太小的文件,太小的文件会造成磁盘碎片。
2、Memcached
Memcached作为php5的一个新的扩展缓存类,是一个分布式内存缓存系统。Memcached是“分布式”的内存对象缓存系统,那么就是说,那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源,即使是UNIX本地连接也一样。在我之前的测试数据中显示,memcached本地读写速度要比直接PHP内存数组慢几十倍,而APC、共享内存方式都和直接数组差不多。可见,如果只是本地级缓存,使用memcached是非常不划算的。
Memcahce如何部署:
首先启动n个memcache进程,这些进程可以在不同的server的不同端口上.然后使用perl的api可以方便的一次链接多个memcache,存储读取机制不明.不久找到php的一个MemcachedClient类,基本上就是perl里api的再实现.它使用的fscokopen或者socket系列function来直接读取memcache----这说明只要清楚memcache的网络协议,你甚至不用装什么php的memcacheextenstion.看了这个类的实现,基本上弄清楚,它的分布式应用差不多就是将不同的key保存在不同的memcachedaemon,不会保留多个副本,也就不存在多memcache同步的问题了。
memcached也经常作为服务器之间数据共享的存储媒介,例如在SSO系统中保存系统单点登陆状态的数据就可以保存在memcached中,被多个应用共享
优点:通过简单的配置,可以把数据放到另一台机子的缓存,通过socket读取。这种方法比磁盘存储要快很多,减少io读取,提升web的性能。
缺点:如果memcache机子重启,那么所有缓存数据将丢失,不适宜存储永久数据和数据量大的数据。
总结:memcached使用内存并不会得到成百上千的读写速度提高,它的实际瓶颈在于网络连接,它和使用磁盘的数据库系统相比,好处在于它本身非常“轻”,因为没有过多的开销和直接的读写方式,它可以轻松应付非常大的数据交换量,所以经常会出现两条千兆网络带宽都满负荷了,memcached进程本身并不占用多少CPU资源的情况。总结:
缓存的目的:让被期待性高的数据暂存入性能相对好的存储设备以达到使系统性能提升的目的。任何缓存,无论页面、数据、对象等都是按照上面描述来进行策略选择的。也就是说,不管需要缓存的是什么,你只用选出被期待性高的,然后把他们存入性能相对较好的存储设备就行了。最重要的是找出你系统的瓶颈,然后采用不同的缓存。
全局缓存策略和局部不缓存
来源:昆明多彩网络公司 日期:2011-04-01 阅读: 380 发表评论
缓存不但能够极大的提升网站的速度,而且能提高网站的安全性能,但是弊端是更新的不及时,这里说的是在全局缓存中使用不缓存局部来解决更新不及时的问题。
应该被缓存的地方应当遵循一个原则就是内容不能太频繁更新,同时承载着很多用户的访问, 这里以B2C商城为例:
一、需要被缓存的页面:
1、商品的列表,一个B2C商城的产品更新应该不是很频繁,产品列表页是很多人关注的页面,是需要缓存的第一目标。
2、商品的详细页面,理由 同上。
3、网站的首页,作为网站流量的导入口,必须得缓存起来,让浏览者快速的打开我们的网站,提升信任感。
4、不常更新的页面,如关于我们、联系方式、支付方式等等单一文字页面。
二、不能缓存的地方的条件是该区域是需要因人而异和被频繁更新的地方,局部不能缓存的地方一般有:
1、会员登陆和资料显示区域,因为该区域会因用户的不同而不同,显然不能使用缓存。
2、个人会员中心,包含以往订单、红包、配送等。
3、非常重要的购物车功能,需即时更新,无需缓存。
4、历史浏览记录,每个浏览者有着不一样的浏览历史。
5、当前时间区域,如果将这个加入缓存的话,时间就会停止在生成缓存的一瞬间。
通过合理搭配全局缓存和局部不缓存能够很好的提升网站的运行效率,在最小的硬件成本下获得最好的网站速度性能。]]
smarty的缓存开关变量是$caching,默认是关闭状态,值为false,一般是在调试状态下就关闭,但是真正投入到生产环境的时候是需要开启缓存的,能够极大提升网站的打开速度。
但是smarty的缓存也是一把双刃剑,在缓存前台页面的同时,如果后台数据更新的非常频繁,如果缓存设置不当的话,前台将无法及时更新。
这里介绍另外一个smarty的变量:$compile_check(编译检查变量),如果开启此变量,smarty会检查模板文件是否改动过,如果模板改动过的话smarty就会重新生成模板编译文件,但是否会生成缓存文件需要看两个方面,第一是smarty是否开启了缓存,第二是对应的缓存文件是否存在着。
下面我们列举几个可能性:
1、$compile_check开启,$caching开启,同时设置$caching失效时间为3600秒(即一小时)
a.如果只是数据库更新了内容,模板无改动,不会更新模板编译文件(就算删除模板编译也不会重新生成,模板编译步骤直接跳过),在这3600中,前台页面无法体现出数据更新后的效果;
b.如果更新了模板文件,smarty只会重新生成模板的编译文件,但是缓存依然不会重新生成(除非将之前生成的缓存文件删除);
c.如果模板和数据库都有更新,效果同前一个效果,只是重新生成模板的编译文件,前台效果需要3600秒后才会更新(除非将之前生成的缓存文件删除)。
2、$compile_check关闭,caching开启,同时设置$caching失效时间为3600秒(即一小时)
a.如果只是数据库更新了内容,模板无改动,在这3600中,前台页面无法体现出数据更新后的效果;
b.如果更新了模板文件,smarty不会生成模板的编译文件,缓存不会重新生成(除非将之前生成的缓存文件删除);
c.如果模板和数据库都有更新,模板和缓存都不会重新生成,删除之前生成的缓存后可以重新生成缓存,但是模板编译文件依旧不会生成。
综合上述条件,我们在网站制作中,可以采用这样的策略:
第一种策略:如果为了达到更大的性能,可以将$compile_check关闭,caching开启;
第二种策略:如果只是想仅达到mvp代码和模板分离的效果,可以将$compile_check开启,Caching关闭即可。