Drupal 7 的性能确实是个问题,使用 APC、Memcache 等可以提升不少,但如果想获得更好的性能,可以试试 redis 模块,这个模块可以使用 Redis 数据库作为Drupal的缓存,效果更好。下面的步骤是将 Redis 数据库服务安装在一台远程服务器上,当然与Drupal 安装在同一服务器上也可,具体方法如下:
一、安装 Redis
sudo apt-get install redis-server
二、配置 Redis
vi /etc/redis/redis.conf
取消绑定:将 bind 127.0.0.1 一行注释掉
设置密码:将# requirepass foobared 前的 # 号去掉,将 foobared 修改为你要设置的密码
然后重新启动 redis
三、下载 Redis 模块
将 Redis 模块 放到 sites/all/module/contrib 目录下吧,不用安装。
四、配置 PHP 扩展
PHP访问 Redis 数据库的扩展库有两个,一个是 Predis ,这是一个PHP库,要求 PHP 5.3,直接下载放置到 libraries 目录下即可;另一个是PhpRedis,需要自己编译。两者性能上差别也就毫秒,PhpRedis 性能更好一点。下面说说 PhpRedis 编译方法。
pecl install redis
将 extension=redis.so 添加到 php.ini vi /etc/php5/fpm/php.ini 然后重新载入 php 配置 /etc/init.d/php5-fpm reload 打开 admin/reports/status/php 检查 phpRedis 是否载入:
五、配置 settings.php
// Required configurations.
$conf['lock_inc'] = 'sites/all/modules/contrib/redis/redis.lock.inc';
$conf['cache_backends'][] = 'sites/all/modules/contrib/redis/redis.autoload.inc';
$conf['redis_client_interface'] = 'PhpRedis';
$conf['redis_client_base'] = 2;
$conf['redis_client_host'] = '192.168.1.109'; //换成你的IP
$conf['redis_client_port'] = '6379';
$conf['redis_client_password'] = 'yourpassword';
// $conf['cache_prefix'] = 'mysite_';
// Optional not redis specific.
// $conf['cache_lifetime'] = 0;
// $conf['page_cache_max_age'] = 0;
// $conf['page_cache_maximum_age'] = 0;
$conf['page_cache_invoke_hooks'] = TRUE;
$conf['page_cache_without_database'] = FALSE;
// Cache bins.
$conf['cache_default_class'] = 'Redis_Cache';
$conf['cache_bootstrap'] = 'Redis_Cache';
$conf['cache_class_cache'] = 'Redis_Cache';
$conf['cache_class_cache_menu'] = 'Redis_Cache';
$conf['cache_class_cache_block'] = 'Redis_Cache';
$conf['cache_class_cache_views'] = 'Redis_Cache';
$conf['cache_class_cache_views_data'] = 'Redis_Cache';
$conf['cache_field'] = 'Redis_Cache';
$conf['cache_filter'] = 'Redis_Cache';
$conf['cache_image'] = 'Redis_Cache';
$conf['cache_libraries'] = 'Redis_Cache';
$conf['cache_metatag'] = 'Redis_Cache';
//$conf['cache_search_api_solr'] = 'Redis_Cache';
// Always Database Cache.
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
// Entity Cache.
if (file_exists('sites/all/modules/contrib/entitycache/entitycache.info')) {
$conf['cache_entity_node'] = 'Redis_Cache';
$conf['cache_entity_fieldable_panels_pane'] = 'Redis_Cache';
$conf['cache_entity_file'] = 'Redis_Cache';
$conf['cache_entity_taxonomy_term'] = 'Redis_Cache';
$conf['cache_entity_taxonomy_vocabulary'] = 'Redis_Cache';
}