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 gracefulStep 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
