Memcache是danga.com的一個項目,最早是爲 LiveJournal 服務的,目前全世界不少人使用這個緩存項目來構建自己大負載的網站,來分擔數據庫的壓力。
memcache是一個高性能分佈式內存對象緩存系統,可以構建大負載網站以便分擔數據庫的讀寫壓力。以守護程序方式運行一個或多個服務器中,隨時接受客戶端連接操作,客戶端可以由各種語言來編寫,我們只介紹php操作。當客戶端與memcached服務建立連接後,就是做讀寫操作,每個對象都有一個唯一的key值,讀取都通過key來操作。保存的對象都是存放在一塊自己分配的內存塊中,並不是保存在磁盤文件中,memcached來管理這些key=》value對應的HashTable數據結構。如若當服務停止或服務器重啓後,memcache中保留的數據也被清除。而在架構中他一般承擔的角色爲把數據庫中有一定原子性的數據取出後保存至內存中,供前臺服務使用,以便來提高和減輕數據庫的承載壓力。
3、memcache優缺點
(存儲某個key-value)
(取某個key-value)
內存:memcache工作原理上面已經說過,是在內存中維護一張很大的hash表,目前只支持一種對應型的數據結構。memcache自己不會監控存入的key/value是否過期,而是當下次獲取key時查看記錄的時間戳,檢查是否過期。這種策略也不會在過期檢查上浪費cpu資源。而內存回收memcache採用刪除最近最少使用的key/value對,將刪除後多出的空間分配給新的key/value對。
4、memcached服務的安裝
1)安裝memcached需要libevent庫的支持,他是memcached所依賴的異步事件通知庫。
下載並安裝最新穩定版2.0.21
tar libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/usr
make && make install
2)下載最新版的服務端memcached(v1.4.15)
tar -zxvf memcached-1.4.15.tar.gz
cd memcached-1.4.15
./configure --with-libevent=/usr
make && make install
3)成功後啓動
/usr/local/bin/memcached -d -m 32 -l 127.0.0.1 -p 12000 -u root -P /tmp/memcached.pid
-d:選項是啓動一個守護進程
-m:分配給Memcache使用的內存數量,單位是MB
-u:運行Memcache的用戶
-l:是監聽的服務器IP地址
-p:是設置Memcache監聽的端口
-c:選項是最大運行的併發連接數,默認是1024
-P:設置保存Memcache的pid文件,裏面保存着memcached的進程號。
如果要結束Memcache進程,執行: # kill `cat /tmp/memcached.pid`
5、安裝memcache php擴展
tar -zxvf memcache-3.0.8.tgz
cd memcache-3.0.8
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
安裝成功後打開php.ini文件增加 extension = "memcache.so"
重啓php
killall php-fpm
/usr/local/php/sbin/php-fpm
至此查看phpinfo,memcache已經安裝成。
6、php中memcache的應用
文章到此其實就了一段落了,因爲php的應用實在很簡單,下面整理了一份php代碼。
//連接
$m = new Memcache;
$m->connect("127.0.0.1", 12000);
//保存
$m->set('good', 'i love you', 0, 60);
//Memcache::set()向good存儲一個元素值(字符串和數值直接存儲,其他類型序列化後存儲。)爲i love you 。參數60是以秒爲單位的失效時間, 如果設置爲0表明該元素永不過期(但是它可能會因爲爲了給其他項分配空間而被刪除)。如果你希望存儲的元素經過壓縮(使用zlib),你可以設置第三個參數爲MEMCACHE_COMPRESSED。
$val = $mem->get('good');
//替換
$m->replace('good', 'i love you too', 0, 60);
$val = $m->get('good');
//刪除
$m->delete('good');
$val = $m->get('good');
//保存
$m->set('good2', 'i love you', 0, 60);
//清除所有
$m->flush();
$val = $m->get('good2');
//關閉連接
$m->close();
7、memcache工具
這裏介紹一個memcache監控工具 memcache top
memcache-top的project地址如下 http://code.google.com/p/memcache-top/
下載後只有一個文件,可以打開它並進行memcached集羣配置,多個節點之間以逗號分隔。
# List of servers/ ports to query.
@default_instances = (
'127.0.0.1:11211',
);
運行前要確保memcache-top腳本具有可執行權限,然後使用./執行即可。
memcache-top比較重要的幾個參數包括:
–commands: 顯示GETS/SETS命令的調用次數
–sleep: 刷新間隔,默認爲3秒
–lifetime: 顯示自memcached啓動以來的累計統計值,默認關閉,即僅顯示瞬時速率。