Memcached的使用

Memcached的使用

一、安装Memcached及Memcached配置和状态查询(此处将其作为系统服务安装)

要想使用Memcached做缓存首先需要安装Memcached服务,安装方法如下:

1.下载Memcached:http://code.jellycan.com/memcached/现在的最新版本是1.2.6.注意下载正确的版本,windows服务的话下载win32binary。

2.解压之后放在硬盘的目录下,如:D:\memcached.然后在运行中输入cmd进入命令行,进入到Memcached.exe所在的目录,例如:D:\memcached,然后输入:Memcached–dinstall,即可完成安装。

Memcached还有其他的一些常用的命令如下:

-p监听的端口

-l连接的IP地址,默认是本机

-dstart启动memcached服务

-drestart重起memcached服务

-dstop|shutdown关闭正在运行的memcached服务

-dinstall安装memcached服务

-duninstall卸载memcached服务

-u以的身份运行(仅在以root运行的时候有效)

-m最大内存使用,单位MB。默认64MB

-M内存耗尽时返回错误,而不是删除项

-c最大同时连接数,默认是1024

-f块大小增长因子,默认是1.25

-n最小分配空间,key+value+flags默认是48

-h显示帮助

按照上面的安装步骤安装之后,使用memcached–m200来调整最大内存占用之后会发现没有起作用,总是默认的64MB的内存,在网上搜了一下,原因是注册表中并没有写入信息,可以这样来修改。

1.memcached–dshutdown首先关闭memcached服务。

2.进入注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcachedServer,在其中有一个ImagePath项,值为"d:\memcached\memcached.exe"-drunservice,在后面加上-l127.0.0.1-m3000-c2048。

3.memcached–dstart启动memcached服务,这样就将memcached的最大内存修改为了3000MB。

对Memcached缓存服务的状态查询,可以先telnet连接上服务:telnet127.0.0.111211,然后使用stats命令查看缓存服务的状态,会返回如下的数据:

time:1255537291服务器当前的unix时间戳

total_items:54从服务器启动以后存储的items总数量

connection_structures:19服务器分配的连接构造数

version:1.2.6memcache版本

limit_maxbytes:67108864分配给memcache的内存大小(字节)

cmd_get:1645get命令(获取)总请求次数

evictions:0为获取空闲内存而删除的items数(分配给memcache的空间用满后需

要删除旧的items来得到空间分配给新的items)

total_connections:19从服务器启动以后曾经打开过的连接数

bytes:248723当前服务器存储items占用的字节数

threads:1当前线程数

get_misses:82总未命中次数

pointer_size:32当前操作系统的指针大小(32位系统一般是32bit)

bytes_read:490982总读取字节数(请求字节数)

uptime:161服务器已经运行的秒数

curr_connections:18当前打开着的连接数

pid:2816memcache服务器的进程ID

bytes_written:16517259总发送字节数(结果字节数)

get_hits:1563总命中次数

cmd_set:54set命令(保存)总请求次数

curr_items:28服务器当前存储的items数量

二、客户端使用

下载memcachedjavaclient:[url]https://github.com/gwhalin/Memcached-Java-Client[/url]1解压后将java_memcached-release_2.5.3.jarjar包添加到工程的classpath中

    2 利用memcached java client 一个简单的应用

/**

*Copyright(c)2008GregWhalin

*Allrightsreserved.

*

*Thislibraryisfreesoftware;youcanredistributeitand/or

*modifyitunderthetermsoftheBSDlicense

*

*Thislibraryisdistributedinthehopethatitwillbe

*useful,butWITHOUTANYWARRANTY;withouteventheimplied

*warrantyofMERCHANTABILITYorFITNESSFORAPARTICULAR

*PURPOSE.

*

*YoushouldhavereceivedacopyoftheBSDLicensealongwiththis

*library.

*

*@authorGregWhalin<greg@meetup.com>

*/

packagecom.danga.MemCached.test;

importjava.util.Hashtable;

importcom.danga.MemCached.MemCachedClient;

importcom.danga.MemCached.SockIOPool;

publicclassMemcachedTest{

//storeresultsfromthreads

privatestaticHashtable<Integer,StringBuilder>threadInfo=

newHashtable<Integer,StringBuilder>();

/**

*ThisrunsthroughsomesimpletestsoftheMemcacheClient.

*

*Commandlineargs:

*args[0]=numberofthreadstospawn生产的线程的数目

*args[1]=numberofrunsperthread每个线程操作次数

*args[2]=sizeofobjecttostore

*

*@paramargsthecommandlinearguments

*/

publicstaticvoidmain(String[]args){

//String[]serverlist={"hengtiandesk144:11211","hengtiandesk144:11212"};

String[]serverlist={"localhost:11211"};

//initializethepoolformemcacheservers

SockIOPoolpool=SockIOPool.getInstance();

pool.setServers(serverlist);

pool.setInitConn(5);

pool.setMinConn(5);

pool.setMaxConn(50);

//Setthesleeptimebetweenrunsofthepoolmaintenancethread.

pool.setMaintSleep(30);

//SetstheNaglealgflagforthepool.

pool.setNagle(false);

pool.initialize();

/*intthreads=Integer.parseInt(args[0]);

intruns=Integer.parseInt(args[1]);

intsize=1024*Integer.parseInt(args[2]);//howmanykilobytes

*/

intthreads=Integer.parseInt("20");

intruns=Integer.parseInt("30");

intsize=1024*Integer.parseInt("10");//howmanykilobytes

//getobjecttostore

int[]obj=newint[size];

for(inti=0;i<size;i++){

obj[i]=i;

}

String[]keys=newString[size];

for(inti=0;i<size;i++){

keys[i]="test_key"+i;

}

for(inti=0;i<threads;i++){//模仿连接服务器数目

benchb=newbench(runs,i,obj,keys);

b.start();

}

inti=0;

while(i<threads){

if(threadInfo.containsKey(newInteger(i))){

System.out.println(threadInfo.get(newInteger(i)));

i++;

}

else{

try{

Thread.sleep(1000);

}

catch(InterruptedExceptione){

e.printStackTrace();

}

}

}

pool.shutDown();

System.exit(1);

}

/**

*Testcodeperthread.

*/

privatestaticclassbenchextendsThread{

privateintruns;

privateintthreadNum;

privateint[]object;

privateString[]keys;

privateintsize;

publicbench(intruns,intthreadNum,int[]object,String[]keys){

this.runs=runs;

this.threadNum=threadNum;

this.object=object;

this.keys=keys;

this.size=object.length;

}

@SuppressWarnings("deprecation")

publicvoidrun(){

//单线程,多线程不安全

StringBuilderresult=newStringBuilder();

//getclientinstance

MemCachedClientmc=newMemCachedClient();

mc.setCompressEnable(false);

mc.setCompressThreshold(0);

//timedeletes

longstart=System.currentTimeMillis();

for(inti=0;i<runs;i++){

mc.delete(keys[i]);

}

longelapse=System.currentTimeMillis()-start;

floatavg=(float)elapse/runs;

result.append("\nthread"+threadNum+":runs:"+runs+"deletesofobj"+(size/1024)+"KB--avgtimeperreq"+avg+"ms(total:"+elapse+"ms)");

//timestores

start=System.currentTimeMillis();

for(inti=0;i<runs;i++){

//System.out.println(keys[i]+object[i]);

mc.set(keys[i],object[i]);

}

elapse=System.currentTimeMillis()-start;

avg=(float)elapse/runs;

result.append("\nthread"+threadNum+":runs:"+runs+"storesofobj"+(size/1024)+"KB--avgtimeperreq"+avg+"ms(total:"+elapse+"ms)");

//timegets

start=System.currentTimeMillis();

for(inti=0;i<runs;i++){

mc.get(keys[i]);

}

elapse=System.currentTimeMillis()-start;

avg=(float)elapse/runs;

result.append("\nthread"+threadNum+":runs:"+runs+"getsofobj"+(size/1024)+"KB--avgtimeperreq"+avg+"ms(total:"+elapse+"ms)");

threadInfo.put(newInteger(threadNum),result);

}

}

}
  • java_memcached-release_2.5.3.jar
  • memcached-1.2.6-win32-bin.zip
  • java_memcached-release_2.5.2.zip
  • memcached-1.2.6-win32-src.zip
  • java_memcached-release_2.5.2.jar

相关推荐