伺服器端主要是安裝memcache伺服器端,目前的最新版本是 memcached-1.3.0 。
下載官網:http://www.danga.com
另外,Memcache用到了libevent這個庫用於Socket的處理,所以還需要安裝libevent,libevent的最新版本是libevent-1.3。(如果你的系統已經安裝了libevent,可以不用安裝)
下載官網:http://www.monkey.org/~provos/libevent/
1.分別把memcached和libevent下載回來,放到 /tmp 目錄下:
# cd /tmp
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz
2.先安裝libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install
3.測試libevent是否安裝成功:
# ls -al /usr/lib | grep libevent
lrwxrwxrwx root root ?? : libevent-1.2.so. -> libevent-1.2.so.1.0.
-rwxr-xr-x root root ?? : libevent-1.2.so.1.0.
-rw-r–r– root root ?? : libevent.a
-rwxr-xr-x root root ?? : libevent.la
lrwxrwxrwx root root ?? : libevent.so -> libevent-1.2.so.1.0.
還不錯,都安裝上了。
4.安裝memcached,同時需要安裝中指定libevent的安裝位置:
# cd /tmp
# tar zxvf memcached-1.2..tar.gz
# cd memcached-1.2.
# ./configure --with-libevent=/usr(此處可指定mem安裝路徑,如:--prefix=/usr/memcached)
# make
# make install
如果中間出現報錯,請仔細檢查錯誤資訊,按照錯誤資訊來配置或者增加相應的庫或者路徑。
安裝完成後會把memcached放到 /usr/local/bin/memcached ,
5.測試是否成功安裝memcached:
# ls -al /usr/local/bin/mem*
-rwxr-xr-x root root ?? : /usr/local/bin/memcached
-rwxr-xr-x root root ?? : /usr/local/bin/memcached-debug
memcached的基本設定:
1.啟動Memcache的伺服器端:
# /usr/local/bin/memcached -d -m 512 -u root -l 127.0.0.1 -p 11211 -c 256 -P /tmp/memcached.pid
-d 啟動一個守護程序,
-m 分配給Memcache使用的記憶體數量,單位M,
-u 執行Memcache的使用者,我這裡是root,
-l 監聽的伺服器IP地址,預設所有(內外網都可以), 127.0.0.1為只允許本機連線。
-p Memcache監聽的埠,預設11211,
-c 最大執行的併發連線數,預設是1024,我這裡設定了256,按照你伺服器的負載量來設定,
-P 儲存Memcache的pid檔案,我這裡是儲存在 /tmp/memcached.pid,
補充啟動引數:
-d start 啟動memcached服務
-d restart 重起memcached服務
-d stop|shutdown 關閉正在執行的memcached服務
-d install 安裝memcached服務
-d uninstall 解除安裝memcached服務
-t 執行緒數(預設4個執行緒)
-M 記憶體耗盡時返回錯誤,而不是刪除項(即禁止LRU)
-f 塊大小增長因子,預設是1.25
-n 最小分配空間,key+value+flags預設是48(chunk的初始大小)
-I page的大小,單位為byte,預設1M(1024*1024bytes)
-R 每個event連線最大併發數(預設20)
-B 繫結協議,one of ascii, binary, or auto (default)
-vv 顯示啟動的詳細資訊,(slab的分配個數)
-h 顯示幫助
2.如果要結束Memcache程序,執行:
# kill `cat /tmp/memcached.pid`
也可以啟動多個守護程序,不過埠不能重複。
安裝Memcache的PHP擴充套件
A.memcache
1.在http://pecl.php.net/package/memcache 選擇相應想要下載的memcache版本。
2.安裝PHP的memcache擴充套件
#tar vxzf memcache-2.2..tgz
#cd memcache-2.2.
#/usr/local/php/bin/phpize(php-fpm+nginx的安裝執行:/usr/bin/phpize)
#./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir (php+fpm的php-config在/usr/bin/php-config)
#make
#make install
3.上述安裝完後會有類似這樣的提示:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/
php+fpm安裝的提示:Installing shared extensions: /usr/lib64/php/modules/
4.把php.ini中的extension_dir = “./”修改為
extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-2007xxxx/”
新增一行來載入memcache擴充套件:extension=memcache.so
nginx+php-fpm安裝的無需配置php.ini檔案,因為生成的擴充套件就在/usr/lib64/php/modules下,只需在/etc/php.d下建立memcache.ini裡邊寫上和其他配置檔案相同的就行,然後重啟/etc/init.d/php-fpm restart
B.memcached(基於libmemcached)
1.為什麼要裝memcached擴充套件
memcached的1.2.4及以上增加了CAS(Check and Set)協議,對於同一key的多進行程的併發處理問題。這種情況其實根資料庫很像,如果同時有幾個程序對同一個表的同一資料進行更新的話,那會不會打架呢,哈哈。資料庫裡面可以鎖定整張表,也可以鎖定表裡面一 行的功能,其實memcached加入的CAS根這個差不多。
php_memcached支援binary protocol 協議,而php_memcache協議不支援,php_memcached支援對同一key的多程序的併發處理問題,
memcached還有個非常稱讚的地方,就是flag不是在操作的時候設定了,而是有了一個統一的setOption()。Memcached實現了更多的memcached協議。
php的擴充套件memcache,不支援cas,所以我們要裝memcached擴充套件,memcached擴充套件是基於libmemcached,所以要先安裝libmemcached
2.檢視memcahced的版本資訊
telnet 127.0.0.1 12000
stats
你會看到有以下資訊
STAT pid 15322
STAT uptime 1885
STAT time 1279455772
STAT version 1.2.8
STAT pointer_size 32
如果版本過低,考慮重新裝一下
退出telnet ,ctrl + ] 然後在按q就行了。
3.安裝所要軟體( 這兩個版本很舊了,看下邊紅色字型的解釋 )
wget http://launchpad.net/libmemcached/1.0/0.42/+download/libmemcached-0.42.tar.gz
wget http://pecl.php.net/get/memcached-1.0.2.tgz
4.安裝libmemcached
#tar zxvf libmemcached-0.42.tar.gz
#cd libmemcached-0.42
#./configure --prefix=/usr/local/libmemcached --with-memcached
#make && make install
安裝要注意的問題:
1, 安裝過程中不要忘了,--with-memcached,不然會提示你
checking for memcached... no
configure: error: "could not find memcached binary"
2,你的memcached是不是1.2.4以上的,如果不是會提示你
clients/ms_thread.o: In function `ms_setup_thread':
/home/zhangy/libmemcached-0.42/clients/ms_thread.c:225: undefined reference to `__sync_fetch_and_add_4'
clients/ms_thread.o:/home/zhangy/libmemcached-0.42/clients/ms_thread.c:196: more undefined references to `__sync_fetch_and_add_4' follow
collect2: ld returned 1 exit status
make[2]: *** [clients/memslap] Error 1
make[2]: Leaving directory `/home/zhangy/libmemcached-0.42'
解決辦法是--disable-64bit CFLAGS="-O3 -march=i686",但如果不用這個64位的long型資料,我想php擴充套件memcached,memcache也就沒什麼區別了,裝memcached也就沒什麼意思了。
5.php的擴充套件memcached的安裝
#tar zxvf memcached-1.0..tar.gz
#cd memcached-1.0.
#/usr/local/php/bin/phpize
#./configure --enable-memcached --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached(如果libmemcached安裝沒有指定--prefix,此處就無需 --with-libmemcached-dir)
#make && make install
vi /usr/local/php/lib/php.ini
加上extension=memcached.so重起一下服務就可以了。
****安裝libmemcached和memcached遇到的問題****
問題:下載了第3步中的兩個版本後,libmemcached可以正常安裝,但是安裝memcached擴充套件時make報錯,搜了半天沒找到解決辦法,有人說是版本問題。
解決:
下載libmemcached和memcached擴充套件的最新版本:
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
wget http://pecl.php.net/get/memcached-2.2.0.tgz
再按照4,5步進行安裝:在執行第5步make報錯:error:no,sasl.h is not available ,在./configure時加上引數--disable-memcached-sasl ,至此安裝完成。