Site icon Mr. 沙先生

php , php-fpm 使用 memcached,加速存取資料的速度

這幾天剛好實作了 memcached 在主線產品上,剛好記錄一下實作過程

memcached 是基於 NVP(Name-Value Pair) 分散式記憶體快取系統,被大量廣泛運用在線上環境,除了可以加快存取速度,還可以集中管理,避免主機異常而 session 遺失。

 

Memcached for PHP

Step.1 安裝 memcached

$ rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
$ yum install memcached

 

Step.2 設定 memcached

PORT="11211"
USER="memcached"
MAXCONN="2048"
CACHESIZE="64"
OPTIONS=""

可以按照需求調整大小

 

Step.3 啟動 memcached

$ chkconfig memcached on
$ service memcached start

這樣就搞定 memcached 了,根本超簡單!版本 1.4.25,yum 有跟上最新版本的腳步哦!

 

Step.4 安裝 PHP memcached

$ yum install zlib-devel libmemcached-devel php-pear php-devel gcc gcc-c++ php php-mbstring php-mysql php-pecl-memcached

yum 安裝的 php-pecl-memcached 是 2.2.0 版本的

 

Step.5 修改 php.ini

session.save_handler = memcached
session.save_path = "127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

如果有集中管理 memcached server,請務必加入 persistent 參數,避免 session 存入失敗。

memcached 的設定檔在安裝 php-pecl-memcached 的時候就建立在 /etc/php.d/z-memcached.ini

 

 

Step.6 重新啟動 php-fpm 使其生效

$ service php-fpm reload

 

驗證 memcached

insert value to memcache

$ vim memcached.php

<?php
$memcache = new memcached();
$memcache->addServer('127.0.0.1', 11211);
$memcache->set('memcached','insert memcached finisd!');
echo $memcache->get('memcached');
?>

$ php -f memcached.php
insert memcached finisd!

 

verify phpinfo

$ vim phpinfo.php
<?php
phpinfo()
?>

$ php -f phpinfo.php | grep session

session.save_handler => memcached => memcached
session.save_path => 127.0.0.1:11211?persistent=1&amp;weight=1&amp;timeout=1&amp;retry_interval=15 => 127.0.0.1:11211?persistent=1&amp;weight=1&amp;timeout=1&amp;retry_interval=15

 

用 memcached-tool 查看 memcached 狀態

$ memcached-tool localhost:11211 stats

 

 

Memcache for php-fpm

在預設 php-fpm 所提供的設定檔中 session.save_handler & session.save_path 是有自訂而且預設為 file,如果你有詳細在做 TestCase 的話,在 TestCase2 不管你怎麼測試都還會是使用 file,這邊必須將 php-fpm 的設定拿掉

$ vim /etc/php-fpm.d/www.conf

註解這三行,將設定值還給php.ini
;php_value[session.save_handler] = files
;php_value[session.save_path]    = /var/lib/php/session
;php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache

$ service php-fpm restart

在驗證一次 phpinfo 就可以看到正確的 memcached 設定!

 

 

此篇示範的是單機處理,當然最好的方式是採用集中 memcache server 的方式進行管理。

 

 

參考資料:

如何使用 memcached 做快取

php 使用 memcached 存取資料,在記憶體裡,加快速度

 

 

Exit mobile version