memcached 是甚麼? 一句話理解
基本上就是透過記憶體存取,讓存取速度變快。它同樣提供了一個像 session 一樣的功能,在 php.ini 設定後可以取代 session 機制,本篇文章會示範如何安裝
Linux memcached 服務安裝
Step 1 更新Linux的軟體版本
yum update -y
Step 2 安裝 memcached
yum install memcached
Step 3 設定 Configure Memcached
vi /etc/sysconfig/memcached
PORT=”11211″
USER=”memcached”
MAXCONN=”1024″
CACHESIZE=”2048″
OPTIONS=””
============================
PORT:listen監聽的port
USER:程序擁有者
MAXCONN:最大連線數
CACHESIZE:快取可使用的記憶體大小(MB)
OPTIONS:額外的設定
要知道 OPTIONS 怎麼設定,可參下方的連結
Step 4 啟動/重啟/查看 Memcached 指令
# systemctl start memcached.service # systemctl restart memcached.service # systemctl status memcached.service
PHP memcached 模組安裝 (for XAMPP)
Step 1 安装 libmemcached
yum -y install libmemcached libmemcached-devel
Step 2 安装memcached
#cd /opt/lampp/bin #./pecl install memcached 所有問答都按 ENTER 預設值即可
PHP memcached 模組安裝(for 原生apache)
Step 1 安装 php-pecl-memcache
# sudo yum install memcached # sudo yum install php-memcached # sudo apachectl graceful
Step 2 安裝後需要重新啟動網頁伺服器及 Memcached
# systemctl restart memcached # systemctl restart httpd
安裝完成後,最後 到 phpinfo看 如果可以在頁面找到 “memcached” 表示成功
修改 /etc/php.ini (彈性選擇是否設定)
一般 PHP SESSION 都是透過一個檔案作為存取,通常檔案名稱為 sess_xxxxxxxxxxxxx 會存放在某個路徑下(可用 session_save_path() 找到),如果設定為以下的話就不會再產生檔案,而是全部交給 memcached 來存取 SESSION,可以依情況斟酌看看
session.save_handler = memcached session.save_path = "localhost:11211"
請注意 /etc/httpd/conf.d/php.conf 會蓋掉 php.ini 設定
搜尋 session.save_handler & session.save_path 將其註解才能吃到 php.ini 的設定,或是也可以保留這邊的設定~
# php_value session.save_handler "files"
# php_value session.save_path "/var/lib/php/session"
錯誤排除
如遇到 ERROR: `phpize’ failed
解決方法 yum install m4 autoconf
如遇到 error: memcached support requires ZLIB.
解決方法 yum install -y zlib zlib-devel vi /opt/lampp/etc/php.ini 搜尋 ;zend_extension=opcache.so 下方加入 extension=memcached.so 重啟apache /opt/lampp/lampp restartapache 到 phpinfo看 是否已經啟用 memcached
PHP 使用範例 – 暫存資料
<?php $oMemcache = new Memcached(); $oMemcache->addServer('localhost',11211); // loaclhost可改成某台IP Server $oMemcache->set('test_memcached','hello memcached!<br/>'); echo $oMemcache->get('memcached'); // 輸出 hello memcached!
PHP 使用範例 – 資料庫快取
<?php $oMemcache = new Memcached(); $oMemcache->addServer('localhost',11211); // loaclhost可改成某台IP Server $oMemcache->set('userid','admin'); echo get_user('admin'); // 輸出粗體那行所設定的 userid,節省了DB SELECT的查詢時間 function get_user ($userid) { global $oMemcache; result = $oMemcache->get($userid); if (!result) { $result = db_select("SELECT * FROM users WHERE userid = ?", userid); $oMemcache->set('userid', $result); } return $result; }
Memcached session PHP Warning
session_start(): Unable to clear session lock record in session_start(): Failed to read session data: memcached
若系統不斷出現以上的訊息,建議您在 php.ini 新增以下參數即可
memcached.sess_locking = 0
參考資料:OPTIONS 參數參考說、memcached使用方法說明、ssorc.tw