memcached 怎麼安裝? php 使用 memcached 存取資料為什麼能夠提升速度呢?
LINUX 軟體安裝

memcached 怎麼安裝? php 使用 memcached 存取資料為什麼能夠提升速度呢?

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。