Drupal 性能优化之 Redis 篇

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';
}