這幾天剛好實作了 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
- TestCase 1
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!
- TestCase 2
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&weight=1&timeout=1&retry_interval=15 => 127.0.0.1:11211?persistent=1&weight=1&timeout=1&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 的方式進行管理。
參考資料:
php 使用 memcached 存取資料,在記憶體裡,加快速度