- 浏览: 133824 次
- 性别:
- 来自: 杭州
最新评论
-
云散风清lc:
水电费分散三大方法是[color=red][/color]
zkClient -
fireye83:
分开打包上传的,文件大小有限制,一个文件只能小于10M
android-sdk-window与ADT下载 -
kkppccdd:
Alumnus
Self-introduction template -
louieyu:
android-7的各个部分是不是一样的啊?来个说明啊
android-sdk-window与ADT下载 -
q694119254:
...
android 反编译心得
Java开发中的Memcache原理及实现
- 博客分类:
- java
七、 Memcached 客户端程序
Memcached的java客户端已经存在三种了:
? 官方提供的基于传统阻塞io由Greg Whalin维护的客户端
? Dustin Sallings实现的基于java nio的Spymemcached
? XMemcached
1. 三种API比较
1) memcached client for java
较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。
A simple, asynchronous, single-threaded memcached client written in java. 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常。
XMemcached同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此 XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比 Spymemcached的表现更为优秀,具体可以看这个Java Memcached Clients Benchmark。
由于memcached client for java发布了新版本,性能上有所提高,并且运行稳定,所以建议使用memcached client for java。
XMemcached也使用得比较广泛,而且有较详细的中文API文档,具有如下特点:高性能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持JMX、与Spring框架和Hibernate-memcached的集成、客户端连接池、可扩展性好等。
下面给出这三种客户端的示例程序。
3. 示例程序
1) memcached client for java
从前面介绍的Java环境的Memcached客户端程序项目网址里,下载最新版的客户端程序包:java_memcached-release_2.5.1.zip,解压后,文件夹里找到java_memcached- release_2.5.1.jar,这个就是客户端的JAR包。将此JAR包添加到项目的构建路径里,则项目中,就可以使用Memcached了。
示例代码如下:
package temp;
import com.danga.MemCached.*;
import org.apache.log4j.*;
public class CacheTest {
public static void main(String[] args) {
/**
* 初始化SockIOPool,管理memcached的连接池
* */
String[] servers = { "10.11.15.222:10000" };
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 < 1000; 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));
}
}
}
spymemcached当前版本是2.5版本,官方网址是:http://code.google.com/p/spymemcached/。可以从地址:http://spymemcached.googlecode.com/files/memcached-2.5.jar 下载最新版本来使用。
示例代码如下:
package temp;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class TestSpyMemcache {
public static void main(String[] args) {
// 保存对象
try {
/* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("10.11.15.222", 10000));
Future<Boolean> b = null;
/* 将key值,过期时间(秒)和要缓存的对象set到memcached中 */
b = mc.set("neea:testDaF:ksIdno", 900, "someObject");
if (b.get().booleanValue() == true) {
mc.shutdown();
}
} catch (Exception ex) {
ex.printStackTrace();
}
// 取得对象
try {
/* 建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号 */
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("10.11.15.222", 10000));
/* 按照key值从memcached中查找缓存,不存在则返回null */
Object b = mc.get("neea:testDaF:ksIdno");
System.out.println(b.toString());
mc.shutdown();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Xmemcached的官方网址是:http://code.google.com/p/xmemcached/,可以从其官网上下载最新版本的1.2.4 来使用。地址是:http://xmemcached.googlecode.com/files/xmemcached-1.2.4-src.tar.gz 。
示例代码如下:
package temp;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import net.rubyeye.xmemcached.utils.AddrUtil;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.exception.MemcachedException;
public class TestXMemcache {
public static void main(String[] args) {
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil
.getAddresses("10.11.15.222:10000"));
MemcachedClient memcachedClient;
try {
memcachedClient = builder.build();
memcachedClient.set("hello", 0, "Hello,xmemcached");
String value = memcachedClient.get("hello");
System.out.println("hello=" + value);
memcachedClient.delete("hello");
value = memcachedClient.get("hello");
System.out.println("hello=" + value);
// close memcached client
memcachedClient.shutdown();
} catch (MemcachedException e) {
System.err.println("MemcachedClient operation fail");
e.printStackTrace();
} catch (TimeoutException e) {
System.err.println("MemcachedClient operation timeout");
e.printStackTrace();
} catch (InterruptedException e) {
// ignore
}catch (IOException e) {
System.err.println("Shutdown MemcachedClient fail");
e.printStackTrace();
}
}
}
发表评论
-
zooKeeper在weblogic下的bug
2014-12-18 17:24 3108因为项目中需要使用分 ... -
zkClient
2013-11-03 21:50 8330直接使用zk的api实现业务功能比较繁琐。因为要处理sess ... -
I0Itec-zkClient小结
2013-11-03 17:17 850zookeeper客户端目前社区中比较多,而且大家在使用zo ... -
统一权限目的
2013-05-28 12:35 01.已经拥有了一套基于角色的系统,(IVMS8200 ... -
ant ftp 大文件上传不上去问题
2013-01-06 13:58 1095ant支持ftp上传需要commons-net的jar包支持, ... -
2011-07-13 19:43 java 如何检测内存泄漏
2012-12-25 13:54 794http://hi.baidu.com/l_rigidity/ ... -
大对象数据的的处理clob和blob
2012-12-19 13:47 01、什么是clob和blob? ... -
MYSQ数据库CLOB、BLOB存取
2012-12-19 13:46 832文本大字段类型(CLOB) ------------ ... -
java存取oracle中的COLB类型数据
2012-12-19 11:55 902java存取oracle中的COLB类型数据 http:// ... -
hibernat批量处理和存取大对象
2012-12-19 11:48 803http://wenku.baidu.com/view/6f6 ... -
String 、InputStream、Reader 之间的转换
2012-12-19 11:01 9081、String –> InputStreamInput ... -
M2eclipse与tomcatplugin布署使用
2012-10-11 13:43 1941M2eclipse与tomcatplugin布 ... -
Batch update returned unexpected row count from update [2]; actual row count
2012-08-09 15:49 4620Batch update returned unexpecte ... -
集群中几种session同步解决方案的比较
2012-06-12 17:12 6384集群中session安全和同步是个最大的问题,下面是我收集 ... -
Hibernate和Mysql5.5创建表出错——type=InnDB
2012-06-11 10:50 1074今天把以前做的一个项目迁移到自己的机器上,项目使用SSH。 ... -
使用 生成runnable jar
2012-06-08 09:12 2176<?xml version="1.0" ... -
tomcat 增大内存
2012-05-28 15:33 829很大的web工程,用tomcat默认分配的内存空间无法启动,如 ... -
sql性能监控(p6spy使用)
2012-05-05 17:50 794http://xiongzhenhui.iteye.com/b ... -
提高hibernate性能
2012-05-05 17:43 715http://blog.csdn.net/tianyawudi ... -
Hibernate之性能监测方法与工具
2012-05-05 17:41 723http://peirenlei.iteye.com/blog ...
相关推荐
Java开发中的Memcache原理及实现Java开发中的Memcache原理及实现
Java开发中的Memcache原理及实现,如何在Java开发中使用Memcache !Redis的入门指导
Java开发中的Memcache原理及实现.zip
Java开发中的Memcache原理及实现
阿里巴巴Java开发规范手册 UMPAY——编码规范 日志规范 异常规范 网络 协议 TCP/IP HTTP hession file HTTPS 负载均衡 容器 JBOSS tomcat resin jetty 容灾 日志框架 开源框架 slf4j 框架实现...
JAVA的数据权限设计 JAVA的数据权限设计 序言 在各种系统中,要保证数据对象的安全性以及易操作性,使企业 的各业务部门、职能部门能够方便而且高效的协同工作,那么一个 好的数据权限管理设计就成为一个关键的问题。...