PHP的缓存和DB层
一个高性能的服务器总是离不开适当的缓存的,附件是本人开发的几个缓存类,包括filecache, apc-cache, memcache, 还请大家指教指教。首先,先说一下这几种缓存的性能。google一下很多文章,一看就知道性能排名依次是apc-cache, memcache, filecache (memcache服务器和web服务器在同一台机器上)。很多人可能会说Mysql不是有个cache层吗?很显然mysql的cache性能很差的,比前面的任何一种都差。至于脏数据问题,我相信开发一个网站不会每个页面都需要实时的数据吧,总有用到缓存的地方。
再来介绍一下几种cache的用途:
[list][*]File Cache:[/list] file cache比较适和使用虚拟主机的网站,因为file cache与网站上有多少网站无关,只需要在你的网站目录里添加一个cache目录,再添加一个.htaccess,里面写上deny from all,并且这个目录你有权限添加文件就行了。这个cache基本没有内存限制,只会受限于操作系统对文件夹和文件的限制而已。
[list][*]apc cache:[/list] apc cache是一个免费的cache模块,只需要下载相应的dll,并在php.ini中激活这个extension就可以了。apc cache分为两种一种是system cache,还有一种是user cache。默认所有编译过的php文件都会被换存在system cache里面,只要文件不改动就一直使用cache里的数据,做为page cache层效率极高。用户也可以在php代码里将一些数据缓存在user cache里,它的存取速度是最快的。但要注意一点,apc cache是整个apache服务器共享的,换句话说别的网站如果跟你在一个apache里面,别人也能看到你cache的内容。还有cache的变量名是大家共享的,别人可以用相同的变量名覆盖你的缓存值,因此在你的应用系统里面必须指定一个app id,并且所有的user cache都要以这个app id开头。最后还有一点就是安全,user cache里的值别人是可以打印出来看的,因此在往apc里缓存东西的时候,务必用hash类做好encrypt和decrypt。 apc cache不适合虚拟主机,也不适合分布式系统,而且对内存空间有限制,如果你有自己的服务器只放你自己的php代码,并且系统不是特别大的话,可以考虑用这个做db cache层。Page cache层用这个还是很不错的。
[list][*]memcache:[/list] memcache非常适合大型的网站,因为memcache可以分布在N多的服务器上,理论上来讲没有内存限制。但他的效率自然没有apc cache快了。memcache默认已经使用了加密算法,但我印象中memcache是没有认证的,因此最好端口号不要暴露给别人,在取key的名字时,最好加些前缀或者后缀。
cache.rar里实现了上述三种cache,db.rar依赖于pear的db package,默认封装了他的很多函数,并且集成了上面的三种cache,使用起来更方便些。
memconfig.rar里面是使用memcache的配置文件和xml schema。
函数命名是ZNF开头的,没错,我喜欢用ZNF框架,很小巧,附件的代码是我为ZNF框架增加的cache层和db层。 由于本人刚学php,如果有理解的不对的地方欢迎指点。如果代码好用的话,麻烦顶一下,给我点动力。 不熟 但是顶一下 可以把mysql cache性能差说明一下吗
[[i] 本帖最后由 pylong 于 2008-10-28 12:59 编辑 [/i]]
页:
[1]
