- 浏览: 923654 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hw7777777:
非常感谢作者提供这么好的工具,在使用的过程中遇到一些问题?1、 ...
基于java nio的memcached客户端——xmemcached -
SINCE1978:
多久过去了时间能抹平一切
无路用的人 -
fangruanyjq:
[img][/img]引用
用osworkflow写一个请假例子(提供代码下载) -
thinkingmysky:
楼主,你确定,java memached client能处理并 ...
memcached java client性能测试的几点疑问和说明 -
hellostory:
aaa5131421 写道07年2月hibernate已经出来 ...
dozer与BeanUtils
1、xmemcached是什么?
xmemcached是基于java nio实现的memcached客户端API。
实际上是基于我实现的一个简单nio框架 http://code.google.com/p/yanf4j/ 的基础上实现的(目前是基于yanf4j 0.52),核心代码不超过1000行,序列化机制直接挪用spymemcached的Transcoder。
性能方面,在读写简单类型上比之spymemcached还是有差距,在读写比较大的对象(如集合)有效率优势。
当 前0.50-beta版本,仅支持单个memcached服务器,以后考虑扩展。目前已经支持get、set、add、replace、delete、 incr、decr、version 这几个协议。API为阻塞模型,而非spymemcached的异步模式,异步模型在批处理的时候有优势,但是阻塞模 式在编程难度和使用上会容易很多。
2、为什么叫xmemcached?
因为我在厦门(XM)混饭......
3、xmemcached的下载和使用
项目主页:http://code.google.com/p/xmemcached/
下载地址:http://code.google.com/p/xmemcached/downloads/list
下载的压缩包中包括了依赖库、源码和打包后的jar,放到项目的lib目录下即可使用。
示例参考:
<!---->package
net.rubyeye.xmemcached.test;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.io.Serializable;
import net.rubyeye.xmemcached.XMemcachedClient;
class Name implements Serializable {
String firstName;
String lastName;
int age;
int money;
public Name(String firstName, String lastName, int age, int money) {
super ();
this .firstName = firstName;
this .lastName = lastName;
this .age = age;
this .money = money;
}
public String toString() {
return " [ " + firstName + " " + lastName + " ,age= " + age + " ,money= "
+ money + " ] " ;
}
}
public class Example {
public static void main(String[] args) {
try {
String ip = " 192.168.222.100 " ;
int port = 11211 ;
XMemcachedClient client = new XMemcachedClient(ip, port);
// 存储操作
if ( ! client.set( " hello " , 0 , " dennis " )) {
System.err.println( " set error " );
}
client.add( " hello " , 0 , " dennis " );
client.replace( " hello " , 0 , " dennis " );
// get操作
String name = (String) client.get( " hello " );
System.out.println(name);
// 批量获取
List < String > keys = new ArrayList < String > ();
keys.add( " hello " );
keys.add( " test " );
Map < String, Object > map = client.get(keys);
System.out.println( " map size: " + map.size());
// delete操作
if ( ! client.delete( " hello " , 1000 )) {
System.err.println( " delete error " );
}
// incr,decr
client.incr( " a " , 4 );
client.decr( " a " , 4 );
// version
String version = client.version();
System.out.println(version);
// 增删改查自定义对象
Name dennis = new Name( " dennis " , " zhuang " , 26 , - 1 );
System.out.println( " dennis: " + dennis);
client.set( " dennis " , 0 , dennis);
Name cachedPerson = (Name) client.get( " dennis " );
System.out.println( " cachedPerson: " + cachedPerson);
cachedPerson.money = - 10000 ;
client.replace( " dennis " , 0 , cachedPerson);
Name cachedPerson2 = (Name) client.get( " dennis " );
System.out.println( " cachedPerson2: " + cachedPerson2);
// delete
client.delete( " dennis " );
System.out.println( " after delete: " + client.get( " dennis " ));
client.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.io.Serializable;
import net.rubyeye.xmemcached.XMemcachedClient;
class Name implements Serializable {
String firstName;
String lastName;
int age;
int money;
public Name(String firstName, String lastName, int age, int money) {
super ();
this .firstName = firstName;
this .lastName = lastName;
this .age = age;
this .money = money;
}
public String toString() {
return " [ " + firstName + " " + lastName + " ,age= " + age + " ,money= "
+ money + " ] " ;
}
}
public class Example {
public static void main(String[] args) {
try {
String ip = " 192.168.222.100 " ;
int port = 11211 ;
XMemcachedClient client = new XMemcachedClient(ip, port);
// 存储操作
if ( ! client.set( " hello " , 0 , " dennis " )) {
System.err.println( " set error " );
}
client.add( " hello " , 0 , " dennis " );
client.replace( " hello " , 0 , " dennis " );
// get操作
String name = (String) client.get( " hello " );
System.out.println(name);
// 批量获取
List < String > keys = new ArrayList < String > ();
keys.add( " hello " );
keys.add( " test " );
Map < String, Object > map = client.get(keys);
System.out.println( " map size: " + map.size());
// delete操作
if ( ! client.delete( " hello " , 1000 )) {
System.err.println( " delete error " );
}
// incr,decr
client.incr( " a " , 4 );
client.decr( " a " , 4 );
// version
String version = client.version();
System.out.println(version);
// 增删改查自定义对象
Name dennis = new Name( " dennis " , " zhuang " , 26 , - 1 );
System.out.println( " dennis: " + dennis);
client.set( " dennis " , 0 , dennis);
Name cachedPerson = (Name) client.get( " dennis " );
System.out.println( " cachedPerson: " + cachedPerson);
cachedPerson.money = - 10000 ;
client.replace( " dennis " , 0 , cachedPerson);
Name cachedPerson2 = (Name) client.get( " dennis " );
System.out.println( " cachedPerson2: " + cachedPerson2);
// delete
client.delete( " dennis " );
System.out.println( " after delete: " + client.get( " dennis " ));
client.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、xmemcached的计划?
1)、添加多服务器和集群支持
2)、性能优化、重构
3)、添加cas原子操作以及更多协议支持
有兴趣的瞧瞧,提提建议。
评论
11 楼
hw7777777
2016-05-17
非常感谢作者提供这么好的工具,在使用的过程中遇到一些问题?
1、使用连接池后,当一个节点断开连接后会一直尝试连接并报出connect refused 异常?是因为有重试机制吗?
2、动态添加节点addserver时当节点服务通信异常也会抛出connect refused 异常,并一直重试?
麻烦作者提供解决思路,非常感谢
1、使用连接池后,当一个节点断开连接后会一直尝试连接并报出connect refused 异常?是因为有重试机制吗?
2、动态添加节点addserver时当节点服务通信异常也会抛出connect refused 异常,并一直重试?
麻烦作者提供解决思路,非常感谢
10 楼
shhbobby
2011-02-17
项目使用中,向作者学习
9 楼
cmjcmj8080
2009-12-09
不好意思,列表是倒序排的,看了半天才看到在前面了 .还以为缓存没更新过来呢...
8 楼
cmjcmj8080
2009-12-09
你好,请问使用xmemcached的时候,怎么样使缓存中的数据同步?
比如 我要缓存一个在线社员列表,是登录一个添加一个,登出一个删除一个key
还是写个定时任务 扫描数据库 有更新的替换全部列表呢?
比如 我要缓存一个在线社员列表,是登录一个添加一个,登出一个删除一个key
还是写个定时任务 扫描数据库 有更新的替换全部列表呢?
7 楼
cmjcmj8080
2009-12-09
你好,请问使用xmemcached的时候,怎么样使缓存中的数据同步?
比如 我要缓存一个在线社员列表,是登录一个添加一个,登出一个删除一个key
还是写个定时任务 扫描数据库 有更新的替换全部列表呢?
比如 我要缓存一个在线社员列表,是登录一个添加一个,登出一个删除一个key
还是写个定时任务 扫描数据库 有更新的替换全部列表呢?
6 楼
yuyee
2009-11-10
5 楼
dennis_zane
2009-11-03
yuyee 写道
有没中文版的....
http://code.google.com/p/xmemcached/wiki/Example_zh
中文指南
4 楼
yuyee
2009-11-03
有没中文版的....
3 楼
pan_java
2009-08-17
相关文档太少了,注解不全,希望完善!
2 楼
dennis_zane
2009-05-27
fly_hyp 写道
测试过了性能非常的好。
呵呵,谢谢,欢迎使用,有任何BUG和建议,请及时发给我,我的email killme2008@gmail.com
1 楼
fly_hyp
2009-05-27
测试过了性能非常的好。
发表评论
-
memcached分布测试报告(一致性哈希情况下的散列函数选择)
2009-03-10 16:30 8416一、背景资料 memcached本身是集中式的缓存系统 ... -
xmemcached 0.60 优化过程
2009-03-06 14:37 3384充分利用jprofile等 ... -
Xmemcached vs Spymemcached 3th(linux下测试结果和多节点下表现)
2009-03-07 10:43 4739翠花,上图,首先是容器类和自定义对象的get、set在不同并发 ... -
xmemcached发布1.0-BETA版
2009-03-09 15:32 3976xmemcached 发布1.0-beta ,从0.6 ... -
山寨nio框架yanf4j发布0.50-alpha
2009-02-04 19:28 4123俺的山寨nio框架yanf4j发布0.50-alpha版本,下 ... -
yanf4j引入了客户端非阻塞API
2009-02-19 00:15 2953yanf4j 发布一个0.50-beta2 版本,这个版本最 ... -
使用yanf4j写个简单聊天室
2008-11-26 11:36 5358yanf4j 简介,请看这里 ... -
Java字符串的最大长度
2009-01-15 01:37 7518在cpp中为了可移植性,s ... -
yanf4j-0.41 beta发布
2009-01-20 14:01 1803项目名称:yanf4j (yet another nio fr ... -
再谈Selector的wakeup方法
2009-02-01 11:15 2998过去推荐过两篇blog《Java NIO类库Selector机 ... -
Yet another nio framework for java
2008-10-11 14:25 1954项目名称:Yanf4j(Yet another nio fra ... -
阻塞队列的性能对比
2008-09-08 10:06 5687阻塞队列的性能对 ... -
java package的设计原则
2008-09-06 00:15 2075典型的J2EE项目,package的设计有成熟的套路可 ... -
线程池池
2008-09-01 19:39 1953这个题目比较怪,听俺道来。俺一直在负责公司游戏服 ... -
第一个MapReduce任务
2008-08-23 11:10 2737前两天在公司内网上搭了个2个节点hadoop集群, ... -
从HDFS看分布式文件系统的设计需求
2008-08-15 22:39 8037分布式文件系统的 ... -
HDFS用户指南(翻译)
2008-08-14 20:27 2094HDFS用户指南 原文地址:http:/ ... -
Ehcache配置的overflowToDisk属性
2008-08-06 23:18 10753Ehcache的overflowToDisk属性用来配 ... -
工作的几个tip
2008-07-07 20:47 28221、如果用java6的ScriptEngineManager ... -
NIO的SelectableChannel关闭的一个问题
2008-06-18 01:53 7105SocketChannel和ServerSocket ...
相关推荐
Memcached的java客户端已经存在三种了:官方提供的基于传统阻塞io由Greg Whalin维护的客户端;Dustin Sallings实现的基于java nio的Spymemcached;XMemcached
Xmemcached是基于java nio实现的高性能可扩展的memcached客户端。它的主要特点: 高性能,稳定可靠,已经在众多公司的众多项目里得到应用。 功能完备:客户端分布式、权重、最新最完整的协议支持。 ...
2.spymemcached,支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常 报timeOut等相关异常。 3.xmemcached,XMemcached也使用得比较广泛,而且...
XMemcached是基于 java nio的Memcached客户端,java nio相比于传统阻塞 io 模型来说,有 效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞 IO为了提高效率,需要 创建一定数量的连接形成连接池,而 nio...
Memcached的java客户端已经存在两个了:官方提供的基于传统阻塞io由Greg Whalin维护的客户端、Dustin Sallings实现的基于java nio的Spymemcached。另外还有一些在此基础上的改进版本。相比于这些客户端,XMemcached...
介绍XMemcached是Java中的一种高性能,易于使用的阻塞多线程memcached客户端。 它是基于nio的,并且经过了精心设计,以实现最佳性能。快速开始:有助于源代码并将其签出到本地计算机。 进行更改并创建拉取请求。 ...
基于java nio实现的高性能可扩展的memcached客户端。虽然Java的memcached库已经很多,但是这些Java开源memcached库并没有一个是基于NIO框架编写,因此并不能够充分发挥Java NIO的性能优势.... xmemcached的项目主页...
XMemcached is a high performance, easy to use blocking multithreaded memcached client in java. It's nio based (using my opensource nio framework :yanf4j), and was carefully tuned to get top ...
XMemcached 是一个高性能、易用的 Java 阻塞多线程 memcached 客户端。 它基于 nio 并经过精心设计以获得最佳性能。 ##新闻和下载 。 Maven 依赖: <groupId>com.googlecode.xmemcached</groupId> ...
请问一下 目前 xmemcached 执行的jdk版本是多少? 目前仅兼容到1.5,1.4不兼容;如果需要,你可以自己编译打包一个版本。 从我的角度,不推荐在1.4上使用nio,nio在1.4上的BUG很多。 这个包是我做的演示工程。
spring+xmemcached aop切面 需要xmemcached-1.2.5+spring-2.5.6 class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown"> ${XMemcached_servers} <!-- ...
simple-spring-memcached-3.5.0.jar slf4j-api-1.6.0.jar slf4j-log4j12-1.6.0.jar solr-solrj-3.4.0.jar spring-aop-4.1.6.RELEASE.jar spring-aspects-4.1.6.RELEASE.jar spring-beans-4.1.6.RELEASE.jar ...