玩转Drupal7缓存配置技巧

drupal6有个著名的cacherouter模块,能同时支持db、apc、memcache、file缓存,可以灵活配置各种缓存在不同地方,例如默认在apc、cache_page在file、session在memcache等。
(顺便说说,cacherouter的作者对drupal团队有意见:“我这么好的模块为什么不加入核心?”呵呵)

而在drupal7怎则有三个对应的模块:apc、memcache、filecache,每个模块都有各自帮助文件,笔者偶然发现三个模块的配置方法都差不多,于是把它们综合起来。

方法如下:

1、先下载三个缓存模块在sites/all/modules里面,不用激活模块。

2、在settings.php末尾加上以下配置:

//都是数组,次序无关
//首先memcache
$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
//缓存的默认指定,即除了特别指定外的所有cache都是用memcache(本例)
$conf['cache_default_class'] = 'MemCacheDrupal';

$conf['memcache_servers'] = array(
'127.0.0.1:11211' => 'default',
);
$conf['memcache_bins'] = array(
'cache' => 'default',
'cache_filter' => 'default',
'cache_menu' => 'default'
);

//然后是apc,apc最快,但容量宝贵。
$conf['cache_backends'][] = 'sites/all/modules/apc/drupal_apc_cache.inc';
//drupal的cache和bootstrap,对应数据库里的表,使用apc
$conf['cache_class_cache'] = 'DrupalAPCCache';
$conf['cache_class_cache_bootstrap'] = 'DrupalAPCCache';

//最后是文件缓存
$conf['cache_backends'][] = 'sites/all/modules/filecache/filecache.inc';
//文件存放目录
$conf['filecache_directory'] = '/tmp/filecache-' . substr(conf_path(), 6);
$conf['filecache_fast_pagecache'] = TRUE; //暂时未用到
//页面缓存,对应数据库里的cache_page使用文件缓存
$conf['cache_class_cache_page'] = 'DrupalFileCache';

//这两句建议加上,页面缓存不用读数据库
$conf['page_cache_without_database'] = TRUE;
$conf['page_cache_invoke_hooks'] = FALSE;

本文给出的配置只是例子,根据实际环境进行调配。

各种缓存的效率,最快的是apc,其次是memcache,但如果filecache的目录设定在shm(内存盘),则可能比memcache要快。

apc本身是opcode脚本缓存,缓存数据会占用内存而且产生碎片,一般只存放最常用的数据;
memcache通常用于多服务器环境,需要tcp连接,所以速度比apc慢,而且小站一般用不上;
filecache最便宜,容量几乎无限,但对于一些磁盘io性能差的空间,未必就能带来好处,

文章分类: 
文章标签: