`

基于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  
测试过了性能非常的好。

相关推荐

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

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

    memcached客户端(三种客户端)

    在Java开发中,有三种主流的Memcached客户端库供开发者选择:官方的基于传统阻塞IO的客户端、Dustin Sallings实现的基于Java NIO的Spymemcached以及XMemcached。 1. **官方客户端** 官方提供的客户端是由Greg ...

    memcached的三种java客户端jar

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

    memcached java client

    本篇文章将详细介绍两个常用的Java Memcached客户端:xmemcached和memcache-client-forjava。 **1. xmemcached** xmemcached是由Ketoo开发的一个高性能、高可用性的Java Memcached客户端。它提供了丰富的API,支持...

    Xmemcached测试实例

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

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

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

    Xmemcached 缓存开源项目源码及API

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

    Xmemcached用户指南

    - **基于Java NIO**:XMemcached采用了Java NIO技术,相比传统的阻塞I/O模型具有更高的效率,尤其是在高并发场景下。传统阻塞I/O通常需要通过创建多个连接来形成连接池以提高性能,而Java NIO仅需维持少量连接即可...

    xmemcached jar包,源文件,api

    xmemcached是一个高性能、易用且功能丰富的Java Memcached客户端库。它提供了全面的API,使得开发者能够方便地与Memcached缓存系统进行交互,从而提高Web应用的性能和响应速度。本文将深入探讨xmemcached的相关知识...

    xmemcached

    Xmemcached是一款基于Java编写的高性能、高可用性的Memcached客户端库,由Kafka的创始人Jay Kreps开发。它提供了丰富的功能和优秀的性能,使得在Java应用中集成和使用Memcached变得更加简单。Xmemcached致力于提供...

    xmemcached 中文开发手册

    XMemcached是一款高效能的Java客户端库,专为memcached服务设计。memcached是一种分布式内存缓存技术,主要用于减轻数据库的压力并加速动态Web应用程序的响应速度。XMemcached不仅支持memcached的所有协议,还具备一...

    Xmemcached用户指南.docx

    XMemcached是基于Java NIO实现的,相比其他如Spymemcached等客户端,它具有多个显著优势。 **主要特性** 1. **高性能**:XMemcached利用Java NIO的优势,减少线程创建和切换的开销,尤其在高并发场景下表现出色。...

    Xmemcached官方中文手册

    Xmemcached是一个高性能、轻量级的Java客户端库,专门用于连接和操作Memcached分布式内存缓存系统。这份手册不仅包含了基础的API使用方法,还涵盖了如何将Xmemcached与Spring等主流框架进行集成的详细配置信息。 **...

    Xmemcached用户指南.pdf

    XMemcached是基于Java NIO实现的,相比传统的阻塞IO模型,NIO具有更高的并发性能和较低的资源消耗,尤其在处理大量并发请求时优势明显。 **XMemcached的主要特性** 1. **高性能**:XMemcached利用Java NIO的优势,...

    第八章 企业项目开发--分布式缓存memcached1

    官方提供的Memcached Client for Java基于Java BIO实现,SpyMemcached和XMemcached则是基于Java NIO的实现,其中XMemcached在并发性能上表现更优,SpyMemcached也有不错的性能。在实际应用中,可以根据项目需求选择...

    xmemcached-1.4.3.jar

    xmemcached是一款高性能、轻量级的Java客户端库,专为Memcached缓存系统设计,其1.4.3版本提供了丰富的功能和优化,旨在提升应用的性能和可扩展性。在本文中,我们将详细探讨xmemcached的核心特性和使用方法,帮助...

    Xmemcached一个java实现的分布式缓存

    - **高性能**: Xmemcached使用非阻塞I/O模型,基于NIO框架,确保低延迟和高吞吐量。 - **线程安全**: Xmemcached的API设计为线程安全,可以避免多线程环境下的数据竞争问题。 - **丰富的API**: 提供了包括基本的...

    Memcached负载均衡Jar包大全

    其次,Xmemcached是另一个强大且高效的Java客户端,它支持多线程、NIO和Future模式,提供了丰富的API,可以设置超时时间、会话持久化策略等。使用Xmemcached,开发者可以更加灵活地控制Memcached的使用。 在实际...

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

    memcache.spymemcached,和xmemcached 三种缓存实例

    xmemcached由Kenshoo公司开发,也是一个高性能、高可用性的Memcached Java客户端。与spymemcached相比,xmemcached提供了更全面的API,支持更多的Memcached命令。它的特点包括: - 支持多线程并发操作 - 使用NIO...

Global site tag (gtag.js) - Google Analytics