欢迎来到阳新互联网络科技

php各种缓存策略对比

发布时间:2011-04-22 14:03:23      浏览:
缓存是程序开发无法避让的技术,它有很多好的好处,可以加快网站打开速度,减少服务器负载等等好处,这里来对比一下各种缓存机制的优势和劣势

为什么要使用缓存?

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资源的情况。总结:
缓存的目的:让被期待性高的数据暂存入性能相对好的存储设备以达到使系统性能提升的目的。任何缓存,无论页面、数据、对象等都是按照上面描述来进行策略选择的。也就是说,不管需要缓存的是什么,你只用选出被期待性高的,然后把他们存入性能相对较好的存储设备就行了。最重要的是找出你系统的瓶颈,然后采用不同的缓存。
 

Website Design & Power by:hbyxx.net
网络经济主体信息