libmemcached 是一個(gè) memcached 的庫(kù),客戶(hù)端庫(kù),C 和 C++ 語(yǔ)言實(shí)現(xiàn)的客戶(hù)端庫(kù),具有低內(nèi)存占用率、線程安全、并提供對(duì)memcached功能的全面支持,它還采用 多種命令行工具:memcat,memflush,memrm, memstat,并memslap(負(fù)載代),程序庫(kù)一直在設(shè)計(jì),讓不同的散列方法對(duì)密鑰,分割的鑰匙,并使用統(tǒng)一的散列分配.
基于libmemcached的php memcache client有很多優(yōu)勢(shì).
•hash一致性存儲(chǔ)
•multi get/set
•自動(dòng)把key hash 為int,避開(kāi)了memcache key字符串默認(rèn)小于255Byte的限制,好久沒(méi)有配置服務(wù)器,一直以為libmemcached的php memcached 已經(jīng)納入基本安裝包了,到頭來(lái)還需要自己編譯,整個(gè)安裝過(guò)程很多暗坑,嘗試了幾次才成功.
安裝分兩步:
•安裝libmemcached,目標(biāo)是so和header文件
•安裝memcachedphp extensions
libmemcaced 分為兩大版本0.x和1.x,1.x的版本從2011-09-28開(kāi)始,編譯很麻煩,需要gcc4.0以上的專(zhuān)門(mén)配置,compile無(wú)比慢,0.x版本就簡(jiǎn)單很多,最高版本是0.53,所以選擇安裝0.53.
極品總是成對(duì)出現(xiàn),php的memcahed也從2.1.0開(kāi)始,要求libmemcached 必須是1.0.x版本,libmemcaced我用的0.53,那php-memcahed 就選擇2.0.0,開(kāi)源軟件的版本維護(hù)是一團(tuán)爛帳.
安裝libmemcached,代碼如下:
wget https://launchpad.net/libmemcached/1.0/0.53/+download/libmemcached-0.53.tar.gz
tar xvfz libmemcached-0.53.tar.gz
cd libmemcached-0.53
./configure --prefix=/opt/libmemcached
make && make install
安裝php擴(kuò)展,代碼如下:
wget http://pecl.php.net/get/memcached-2.0.0.tgz
tar zvxf memcached-2.0.0.tgz
cd memcached-2.0.0/
./configure --enable-memcached --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/opt/libmemcached/
make && make install
make install 是把memcached.so 安裝到 ${php install dir}/extensions/no-debug-non-zts-20090626/,這個(gè)目錄隨著php的版本不同而不同.
最后一步,修改php.ini,加上 extension=memcached.so,與我們己安裝好了來(lái)看看簡(jiǎn)單的實(shí)例,代碼如下:
#include <iostream>
#include <string>
#include <libmemcached/memcached.h>
using namespace std;
int main(int argc,char *argv[])
{
//connect server
memcached_st *memc;
memcached_return rc;
memcached_server_st *server;
time_t expiration;
uint32_t flags;
memc = memcached_create(NULL);
server = memcached_server_list_append(NULL,"localhost",11211,&rc);
rc=memcached_server_push(memc,server);
memcached_server_list_free(server);
string key = "key";
string value = "value";
size_t value_length = value.length();
size_t key_length = key.length();
//Save data
rc=memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
29 if(rc==MEMCACHED_SUCCESS)
30 {
31 cout<<"Save data:"<<value<<" sucessful!"<<endl;
32 }
33
34 //Get data
35 char* result = memcached_get(memc,key.c_str(),key_length,&value_length,&flags,&rc);
if(rc == MEMCACHED_SUCCESS)
{
cout<<"Get value:"<<result<<" sucessful!"<<endl;
}
//Delete data
rc=memcached_delete(memc,key.c_str(),key_length,expiration);
if(rc==MEMCACHED_SUCCESS)
{
cout<<"Delete key:"<<key<<" sucessful!"<<endl;
} //開(kāi)源代碼phpfensi.com
//free
memcached_free(memc);
return 0;
}
編譯:g++ -o testmemcached testmemcached.cpp -lmemcached
運(yùn)行:./testmemcached
結(jié)果:Save data:value sucessful!Get value:value sucessful!Delete key:key sucessful!
注意事項(xiàng):
需要注意的是,libmemcached 不是 libmemcache,它們是兩個(gè)不同的客戶(hù)端庫(kù),前者現(xiàn)在的開(kāi)發(fā)比較活,后者已經(jīng)有很長(zhǎng)時(shí)間沒(méi)有更新了.
memcached 是一個(gè)高性能、分布式的內(nèi)存對(duì)象緩存系統(tǒng),通過(guò)內(nèi)存的數(shù)據(jù)緩存來(lái)降低對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),從而提高動(dòng)態(tài)內(nèi)容應(yīng)用網(wǎng)站的速度,memcached 官方開(kāi)發(fā)釋放出來(lái)的,只是應(yīng)用的服務(wù)器端程序,它發(fā)布了服務(wù)器端的連接讀寫(xiě)協(xié)議,客戶(hù)端的實(shí)現(xiàn),則根據(jù)動(dòng)態(tài)內(nèi)容應(yīng)用網(wǎng)站使用的動(dòng)態(tài)腳本的不同,而有多種,具體列表,可查看官方網(wǎng)站.
新聞熱點(diǎn)
疑難解答
圖片精選