伺服器端主要是安裝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 ,至此安裝完成。