php有兩個memcache模塊,一個是php-memcache,一個是php-memcached,php-memcached是最新的,也是比較穩定的,網上的太多的資料都是關於php-memcache的,太少提到php-memcached,而php-memcached的配置跟php-memcache是有所不同的。我的環境是多臺webServer,全安裝了nginx+php,3臺memcached 服務器。
webserver_IP:192.168.10.9----22
memcachedserver_IP:192.168.10.23--25
一、先安裝好web服務器,LNMP一鍵安裝,此處就不多加強調了。
二、安裝memcached服務器。
三、在所有的webServer上安裝php擴展,
安裝包:
memcached 服務器端所需:
memcached-1.4.24.tar.gz
支持PHP擴展所需:
libmemcached-1.0.18.tar.gz
memcached-2.2.0.tgz
在memcached服務器端:
wget http://nchc.dl.sourceforge.net/project/levent/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz
tar xzvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.10-stable
./configure --prefix=/usr
make && make install
2、安裝memcached-1.4.24
wget http://www.memcached.org/files//memcached-1.4.24.tar.gz
cd /software
tar xzvf memcached-1.4.24.tar.gz
cd memcached-1.4.24
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/
make && make install
3、啓動memcached
/usr/local/memcached/bin/memcached -d -m 10000 -p 11211 -u root -c 4096 -P /usr/local/memcached/logs/memcached.pid
執行後,遠程登錄任意一臺memcached服務器,可以用以下辦法查看執行狀態
telnet 192.168.10.23 11211
stats
STAT pid 11568
STAT uptime 5910
STAT time 1241876672
STAT version 1.2.8
STAT pointer_size 32
STAT rusage_user 0.751885
STAT rusage_system 1.584759
STAT curr_items 2615
STAT total_items 36753
STAT bytes 244835
STAT curr_connections 3
STAT total_connections 18427
STAT connection_structures 36
STAT cmd_flush 0
STAT cmd_get 18388
STAT cmd_set 38334
STAT get_hits 15717
STAT get_misses 2671
STAT evictions 0
STAT bytes_read 4924864
STAT bytes_written 1992526
STAT limit_maxbytes 134217728
STAT threads 2
STAT accepting_conns 1
STAT listen_disabled_num 0
END
有以上信息出現,表明啓動成功!
4、加入開機啓動
vim /etc/rc.local
#最後一行加入:
/usr/local/memcached/bin/memcached -d -m 10000 -p 11211 -u root -c 4096 -P /usr/local/memcached/logs/memcached.pid
在webserver上安裝,實現擴展
1、安裝zlib
yum install zlib
2、安裝libmemcached
wget https://launchpadlibrarian.net/165454254/libmemcached-1.0.18.tar.gz
tar zxvf libmemcached-0.26.tar.gz
cd libmemcached-0.26
./configure --prefix=/usr/local/libmemcached/
make && make install
3、安裝php-memcached模塊
wget http://pecl.php.net/get/memcached-2.2.0.tgz
2.2.0 | stable | 2014-04-01 | memcached-2.2.0.tgz (68.8kB) |
---|
tar -zxvf memcached-2.2.0.tgz
cd memcached-2.2.0
phpize
./configure --with-php-config=/usr/bin/php-config --enable-memcache --with-libmemcached-dir=/usr/local/libmemcached
make
make install
make install 結束後:
[root@host23 memcached-2.2.0]# make install
Installing shared extensions: /Data/app/php/lib/php/extensions/no-debug-non-zts-20131226/
4、編輯php.ini
vim /etc/php.ini
修改extension_dir的路徑爲你的
默認的是:
extension_dir= "./"
可以修改爲:
extension_dir= "./"
在文件最後加入:
extension = "/Data/app/php/lib/php/extensions/no-debug-non-zts-20131226/"
也可以不修改extension的路徑,直接在最後添加:
extension = "/Data/app/php/lib/php/extensions/no-debug-non-zts-20131226/memcached.so"
修改php.ini
session.save_handler = files -> session.save_handler = memcached
session.save_path = "/var/lib/php/session" -> session.save_path = "192.168.10.23:11211;/opt/"
9、重啓apache
service httpd restart
測試:
vim test.php
<?php
$memcache_obj = new Memcached();
$memcache_obj->addServer('192.168.1.23', 11211);
$memcache_obj->set('key','memcache 測試!',false, 10) or die ("Failed to save data at the server");
echo $memcache_obj->get('key');
?>
:wq
# /usr/local/php/bin/php test.php
[root@host9 myscripts]# /Data/app/php5.6.11/bin/php testmem2.php
memcache 測試!
[root@host9 myscripts]#
[root@host9 myscripts]# vim testmem2.php 將192.168.1.23改成一錯的,192.168.1.231,保存再測試。
[root@host9 myscripts]# /Data/app/php5.6.11/bin/php testmem2.php
Failed to save data at the server
[root@host9 myscripts]#
1、安裝libmemcached需要先安裝zlib
2、php.ini文件的配置,php-memcached模塊跟php-memcache不同,要設成是memcached,這個在phpinfo頁面的Registered save handlers可以看到。如果設置不正確,會有"Cannot find save handler memcache"的錯誤提示。
3、session.save_path幾乎所有的資料都是session.save_path = "tcp://127.0.0.1:11211",但這可能在memcaceh是這樣用的,我沒有驗證,我一開始也是這樣設置,但一直出現"Failed to write session data (memcached)"的錯誤,找了很入也沒找到是什麼原因,後來在php.net上找到
session.save_path string
Defines a comma separated of hostname:port entries to use for session server pool, for example"sess1:11211, sess2:11211".
這段說明,於是去掉tcp://再試,才終於成功!