`

基于java nio的memcached客户端——xmemcached

    博客分类:
  • java
阅读更多

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();
        }

    }
}

4、xmemcached的计划?

1)、添加多服务器和集群支持

2)、性能优化、重构

3)、添加cas原子操作以及更多协议支持

   
    有兴趣的瞧瞧,提提建议。

12
0
分享到:
评论
11 楼 hw7777777 2016-05-17  
非常感谢作者提供这么好的工具,在使用的过程中遇到一些问题?
1、使用连接池后,当一个节点断开连接后会一直尝试连接并报出connect refused 异常?是因为有重试机制吗?
2、动态添加节点addserver时当节点服务通信异常也会抛出connect refused 异常,并一直重试?

麻烦作者提供解决思路,非常感谢
10 楼 shhbobby 2011-02-17  
项目使用中,向作者学习
9 楼 cmjcmj8080 2009-12-09  
不好意思,列表是倒序排的,看了半天才看到在前面了  .还以为缓存没更新过来呢...
8 楼 cmjcmj8080 2009-12-09  
你好,请问使用xmemcached的时候,怎么样使缓存中的数据同步?
比如 我要缓存一个在线社员列表,是登录一个添加一个,登出一个删除一个key
还是写个定时任务 扫描数据库 有更新的替换全部列表呢?
7 楼 cmjcmj8080 2009-12-09  
你好,请问使用xmemcached的时候,怎么样使缓存中的数据同步?
比如 我要缓存一个在线社员列表,是登录一个添加一个,登出一个删除一个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客户端(三种客户端)

    Memcached的java客户端已经存在三种了:官方提供的基于传统阻塞io由Greg Whalin维护的客户端;Dustin Sallings实现的基于java nio的Spymemcached;XMemcached

    Java的开源高性能memcached客户端XMemcached.zip

    Xmemcached是基于java nio实现的高性能可扩展的memcached客户端。它的主要特点: 高性能,稳定可靠,已经在众多公司的众多项目里得到应用。 功能完备:客户端分布式、权重、最新最完整的协议支持。 ...

    memcached的三种java客户端jar

    2.spymemcached,支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常 报timeOut等相关异常。 3.xmemcached,XMemcached也使用得比较广泛,而且...

    Xmemcached测试实例

    XMemcached是基于 java nio的Memcached客户端,java nio相比于传统阻塞 io 模型来说,有 效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞 IO为了提高效率,需要 创建一定数量的连接形成连接池,而 nio...

    Xmemcached用户指南

    Memcached的java客户端已经存在两个了:官方提供的基于传统阻塞io由Greg Whalin维护的客户端、Dustin Sallings实现的基于java nio的Spymemcached。另外还有一些在此基础上的改进版本。相比于这些客户端,XMemcached...

    xmemcached:高性能,易于使用的Java多线程memcached客户端

    介绍XMemcached是Java中的一种高性能,易于使用的阻塞多线程memcached客户端。 它是基于nio的,并且经过了精心设计,以实现最佳性能。快速开始:有助于源代码并将其签出到本地计算机。 进行更改并创建拉取请求。 ...

    Xmemcached 缓存开源项目源码及API

    基于java nio实现的高性能可扩展的memcached客户端。虽然Java的memcached库已经很多,但是这些Java开源memcached库并没有一个是基于NIO框架编写,因此并不能够充分发挥Java NIO的性能优势.... xmemcached的项目主页...

    xmemcached-1.2.4源码

    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 ...

    strom-xmemcached:Strom版Xmemcached客户端

    XMemcached 是一个高性能、易用的 Java 阻塞多线程 memcached 客户端。 它基于 nio 并经过精心设计以获得最佳性能。 ##新闻和下载 。 Maven 依赖: &lt;groupId&gt;com.googlecode.xmemcached&lt;/groupId&gt; ...

    XMemcached的演示工程

    请问一下 目前 xmemcached 执行的jdk版本是多少? 目前仅兼容到1.5,1.4不兼容;如果需要,你可以自己编译打包一个版本。 从我的角度,不推荐在1.4上使用nio,nio在1.4上的BUG很多。 这个包是我做的演示工程。

    spring-xmemcached

    spring+xmemcached aop切面 需要xmemcached-1.2.5+spring-2.5.6 class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown"&gt; ${XMemcached_servers} &lt;!-- ...

    javaweb项目常用jar包

    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 ...

Global site tag (gtag.js) - Google Analytics