欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

实例讲解分布式缓存软件Memcached的Java客户端使用

程序员文章站 2024-03-08 23:49:46
memcached介绍 下面就来介绍一下memcached。 1、什么是memcached memcached是一个开源的高性能,分布式的内存对象缓存系统,通过键值队...

memcached介绍
下面就来介绍一下memcached。

1、什么是memcached

memcached是一个开源的高性能,分布式的内存对象缓存系统,通过键值队的形式来对数据进行存取,memcached是简单而强大,它的简单设计促进快速部署,易于开发,解决了大数据缓存面临的许多问题。


官方网址是:http://memcached.org/,目前已经有很多知名的互联网应用使用到了memcached,比如wikipedia、flickr、youtube、wordpress等等。

2、下载windows平台下的memcached,地址为:

http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip

对应的源码地址为:

http://code.jellycan.com/files/memcached-1.2.6-win32-src.zip

然后,解压开来,会看到一个memcached.exe文件,进行如下图的安装,将以系统服务的形式安装到机上

实例讲解分布式缓存软件Memcached的Java客户端使用

然后查看系统服务,会发现已经可以看到memcached服务了

实例讲解分布式缓存软件Memcached的Java客户端使用

然后,选中此服务点鼠标右键,启动此服务。

在dos界面中输入:telnet 127.0.0.1 11211来确认服务是否启动无误,如果无误,则会显示如下窗口:

实例讲解分布式缓存软件Memcached的Java客户端使用

上面图中显示的error是我随便输入字符后按回车显示的,这是因为你需要安装memcached规定的协议来进行输入,否则就显示如上所示错误。

3、 memcached的协议与数据存取

所谓协议,可以理解为对其操作(数据存取)的语法规则,存取数据的常用命令和参数如下:

set:存入一条记录

key:记录的键值

flags:十进制的int,标识存储记录时的客户端标志,在记录取出时会返回。

exptim:数据的过期时间,0表示不过期,其他数值则表示有效的毫秒数,在过期后,客户端将取不到这条记录,memcached中的过期记录会被清空或删除。

get:表示从memcached取出key对应的值,如果没有对应的值则返回结束标志end

append:表示对key所对应的值在最后再加入输入的内容

delete:删除key对应的值

更多协议可参考:memcached包中所带的protocol.txt

具体例子如:

需要注意的是:在set时如果指定的字符长度为5,而输入的内容超过了这个长度,那么就会报错:client_error bad data chunk

实例讲解分布式缓存软件Memcached的Java客户端使用

4、 编写代码对memcached进行数据存取操作

一般而言,可以使用开源已封装好的memcached客户端来对memcached进行操作,当然你也可以根据memcached的协议在代码中通过编写socket通信程序实现。

memcached-java-client的下载页面:

http://github.com/gwhalin/memcached-java-client/downloads,然后选择下载:

java_memcached-release_2.5.1.zip

在解压开的test目录中可以看到有些写好的例子,可以通过运行com.danga.memcached.test. testmemcached来查看数据存入和取出情况,这里也贴出其代码:

package com.danga.memcached.test;

import com.danga.memcached.memcachedclient;

import com.danga.memcached.sockiopool;

import org.apache.log4j.*;

public class testmemcached {

public static void main(string[] args) {

// memcached should be running on port 11211 but not on 11212

basicconfigurator.configure();

//缓存服务器地址,多台服务器则以逗号隔开,11211为memcached使用的端口号

string[] servers = { “localhost:11211″ };

//得到一个链接池对象并进行一些初始化工作

sockiopool pool = sockiopool.getinstance();

pool.setservers( servers );

pool.setfailover( true );

pool.setinitconn( 10 );

pool.setminconn( 5 );

pool.setmaxconn( 250 );

//pool.setmaintsleep( 30 );

pool.setnagle( false );

pool.setsocketto( 3000 );

pool.setalivecheck( true );

pool.initialize();

memcachedclient mcc = new memcachedclient();

// turn off most memcached client logging:

//logger.getlogger( memcachedclient.class.getname() ).setlevel( com.schooner.memcached.logger. );

//以下是数据写入和取出操作例子

for ( int i = 0; i < 10; i++ ) {

boolean success = mcc.set( “” + i, “hello!” );

string result = (string)mcc.get( “” + i );

system.out.println( string.format( “set( %d ): %s”, i, success ) );

system.out.println( string.format( “get( %d ): %s”, i, result ) );

}

system.out.println( “\n\t — sleeping –\n” );

try { thread.sleep( 10000 ); } catch ( exception ex ) { }

for ( int i = 0; i < 10; i++ ) {

boolean success = mcc.set( “” + i, “hello!” );

string result = (string)mcc.get( “” + i );

system.out.println( string.format( “set( %d ): %s”, i, success ) );

system.out.println( string.format( “get( %d ): %s”, i, result ) );

}

}

}

memcached的java客户端实例

package com.danga.memcached.test; 
 
import com.danga.memcached.*; 
public class testmemcached { 
 public static void main(string[] args) { 
  /*初始化sockiopool,管理memcached的连接池*/ 
  string[] servers = { "192.168.105.217:11211" }; 
  sockiopool pool = sockiopool.getinstance(); 
  pool.setservers(servers); 
  pool.setfailover(true); 
  pool.setinitconn(10); 
  pool.setminconn(5); 
  pool.setmaxconn(250); 
  pool.setmaintsleep(30); 
  pool.setnagle(false); 
  pool.setsocketto(3000); 
  pool.setalivecheck(true); 
  pool.initialize(); 
  /*建立memcachedclient实例*/ 
  memcachedclient memcachedclient = new memcachedclient(); 
  for (int i = 0; i < 10; i++) { 
   /*将对象加入到memcached缓存*/ 
   boolean success = memcachedclient.set("" + i, "hello!"); 
   /*从memcached缓存中按key值取对象*/ 
   string result = (string) memcachedclient.get("" + i); 
   system.out.println(string.format("set( %d ): %s", i, success)); 
   system.out.println(string.format("get( %d ): %s", i, result)); 
  } 
 } 
} 

1.解压(本例中解压到c:\memcached)。
2、在命令行状态下输入: c:\memcached\memcached.exe -d install 。至此memcached已经安装成windows服务
3、在命令行下输入: c:\memcached\memcached.exe -d start 以启动memcached服务。当然也可以选择在windows服务中启动