標籤:memcached php memcache
Memcached是一款開源、高效能、分布式記憶體對象緩衝系統,可應用各種需要緩衝的情境,其主要目的是通過降低對Database的訪問來加速web應用程式。它是一個基於記憶體的“索引值對”儲存,用於儲存資料庫調用、API調用或頁面引用結果的直接資料,如字串、對象等。
需要說明下他和Memcache的區別,mencache是PHP伺服器的一個模組,用來和Memcached溝通。
資料存放區方式:Slab Allocation
將分配的記憶體分割成各種尺寸的塊 (chunk),並把尺寸相同的塊分成組 (chunk的集合)
資料到期方式:Lazy Expiration + LRU
Lazy Expiration :memcached內部不會監視記錄是否到期,而是在get時查看記錄的時間戳記,檢查記錄是否到期。這種技術被稱為lazy(惰性)expiration。因此,memcached不會在到期監視上耗費CPU時間
LRU:memcached會優先使用已逾時的記錄的空間,但即使如此,也會發生追加新記錄時空間不足的情況,此時就要使用名為 Least Recently Used(LRU)機制來分配空間。顧名思義,這是刪除“最近最少使用”的記錄的機制。因此,當memcached的記憶體空間不足時(無法從slab class 擷取到新的空間時),就從最近未被使用的記錄中搜尋,並將其空間分配給新的記錄。一、安裝libevent
一、memcached依賴於libevent API,項目首頁:http://libevent.org/
1: # tar xf libevent-2.0.21-stable.tar.gz
2: # cd libevent-2.0.21
3: # ./configure --prefix=/usr/local/libevent
4: # make && make install
5:  
6: # echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf
7: # ldconfig
二、安裝配置memcached
1: # tar xf memcached-1.4.15.tar.gz
2: # cd memcached-1.4.15
3: # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent
4: # make && make install
sysv指令碼
#!/bin/bash## Init file for memcached## chkconfig: - 86 14# description: Distributed memory caching daemon## processname: memcached# config: /etc/sysconfig/memcached. /etc/rc.d/init.d/functions## Default variablesPORT="11211"USER="nobody"MAXCONN="1024"CACHESIZE="64"
RETVAL=0prog="/usr/local/memcached/bin/memcached"desc="Distributed memory caching"lockfile="/var/lock/subsys/memcached"start() { echo -n $"Starting $desc (memcached): " daemon $prog -d -p $PORT -u $USER -c $MAXCONN -m $CACHESIZE
RETVAL=$? [ $RETVAL -eq 0 ] && success && touch $lockfile || failure echo return $RETVAL}stop() { echo -n $"Shutting down $desc (memcached): " killproc $prog RETVAL=$? [ $RETVAL -eq 0 ] && success && rm -f $lockfile || failure echo return $RETVAL}restart() { stop start}reload() { echo -n $"Reloading $desc ($prog): " killproc $prog -HUP RETVAL=$? [ $RETVAL -eq 0 ] && success || failure echo return $RETVAL}case "$1" in start) start ;; stop) stop ;; restart) restart ;; condrestart) [ -e $lockfile ] && restart RETVAL=$? ;; reload) reload ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|status}" RETVAL=1esacexit $RETVAL
賦予執行許可權
1: # chmod +x /etc/init.d/memcached
2: # chkconfig --add memcached
3: # service memcached start
三、memcached的常用選項說明
-l <ip_addr>:指定進程監聽的地址;
-d: 以服務模式運行;
-u <username>:以指定的使用者身份運行memcached進程;
-m <num>:用於快取資料的最大記憶體空間,單位為MB,預設為64MB;
-c <num>:最大支援的並發串連數,預設為1024;
-p <num>: 指定監聽的TCP連接埠,預設為11211;
-U <num>:指定監聽的UDP連接埠,預設為11211,0表示關閉UDP連接埠;
-t <threads>:用於處理入站請求的最大線程數,僅在memcached編譯時間開啟了支援線程才有效;--enable-threads
-f <num>:設定Slab Allocator定義預先分配記憶體空間大小固定的塊時使用的增長因子;
-M:禁止使用LRU演算法;
-n: 指定最小的slab chunk大小;單位是位元組;
-S: 啟用sasl進行使用者認證;
四、測試
memcached
儲存類命令:set, add, replace, append, prepend
擷取資料類命令:get, delete, incr/decr
統計類命令:stats, stats items, stats slabs, stats sizes
清理命令: flush_all
訪問Memcached:telnet 主機名稱 連接埠號碼
查看總狀態:stats
查看某項狀態:stats curr_connections
 
 
PS:我看到過有的介紹說是“Memcached單進程最大使用記憶體為2G,如果想用更多記憶體,可以用用其他連接埠再開啟”我沒測試過,寫出來當個備忘。
上面很多內容都引用了了mixi.jp 公司編寫的《Memcached全面剖析》,大家對memcached感興趣請到通過下面連結查閱,講解的非常清晰。
http://blog.charlee.li/memcached-pdf/
 
五、為PHP安裝memcache模組用作和memcached通訊
1: # tar xf memcache-2.2.5.tgz
2: # cd memcache-2.2.5
3: /usr/local/php/bin/phpize
4: # ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
5: # make && make install
編譯後會輸出/path/memcache.so檔案,然後在/etc/php.ini中添加此行extension=/path/memcache.so
六、測試php和memcached工作是否成功
<?php$mem = new Memcache;$mem->connect("127.0.0.1", 11211) or die("Could not connect");#vim memcached.php$version = $mem->getVersion();echo "Server‘s version: ".$version."<br/>\n";$mem->set(‘hellokey‘, ‘Hello World‘, 0, 600) or die("Failed to save data at the memcached server");echo "Store data in the cache (data will expire in 600 seconds)<br/>\n";$get_result = $mem->get(‘hellokey‘);echo "$get_result is from memcached server."; ?>
如果輸出“Hello World is from memcached.”表示成功,反之就不用說了吧!
七、libmemcached工具:
libMemcached則是基於C語言開發的開源的C/C++代碼訪問memcached的庫檔案,可以讓memcached和c/c++一起工作。同時它還提供了數個可以遠程使用的memcached管理工具。
安裝:
1: # tar xf libmemcached-1.0.2.tar.gz
2: # cd libmemcached-1.0.2
3: # ./configure
4: # make && make install
5: # ldconfig
管理工具:
1: # memcat --servers=127.0.0.1:11211 mykey
2: # memping
3: # memslap
4: # memstat
本文出自 “心靜自然通達” 部落格,請務必保留此出處http://bluezombie.blog.51cto.com/1444792/1441071
Memcached安裝方法