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

简介:
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原子操作以及更多协议支持

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

文章转自庄周梦蝶  ,原文发布时间2009-03-03

目录
相关文章
|
16天前
|
消息中间件 缓存 Java
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
零拷贝技术 Zero-Copy 是指计算机执行操作时,可以直接从源(如文件或网络套接字)将数据传输到目标缓冲区, 而不需要 CPU 先将数据从某处内存复制到另一个特定区域,从而减少上下文切换以及 CPU 的拷贝时间。
java nio,netty,kafka 中经常提到“零拷贝”到底是什么?
|
22天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
28 4
|
1月前
|
Java
让星星⭐月亮告诉你,Java NIO之Buffer详解 属性capacity/position/limit/mark 方法put(X)/get()/flip()/compact()/clear()
这段代码演示了Java NIO中`ByteBuffer`的基本操作,包括分配、写入、翻转、读取、压缩和清空缓冲区。通过示例展示了`position`、`limit`和`mark`属性的变化过程,帮助理解缓冲区的工作原理。
30 2
|
2月前
|
存储 网络协议 Java
Java NIO 开发
本文介绍了Java NIO(New IO)及其主要组件,包括Channel、Buffer和Selector,并对比了NIO与传统IO的优势。文章详细讲解了FileChannel、SocketChannel、ServerSocketChannel、DatagramChannel及Pipe.SinkChannel和Pipe.SourceChannel等Channel实现类,并提供了示例代码。通过这些示例,读者可以了解如何使用不同类型的通道进行数据读写操作。
Java NIO 开发
|
1月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
62 1
|
2月前
|
JSON NoSQL Java
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
这篇文章介绍了在Java中使用Redis客户端的几种方法,包括Jedis、SpringDataRedis和SpringBoot整合Redis的操作。文章详细解释了Jedis的基本使用步骤,Jedis连接池的创建和使用,以及在SpringBoot项目中如何配置和使用RedisTemplate和StringRedisTemplate。此外,还探讨了RedisTemplate序列化的两种实践方案,包括默认的JDK序列化和自定义的JSON序列化,以及StringRedisTemplate的使用,它要求键和值都必须是String类型。
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
|
3月前
|
Java
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
84 1
|
3月前
|
Java
"揭秘Java IO三大模式:BIO、NIO、AIO背后的秘密!为何AIO成为高并发时代的宠儿,你的选择对了吗?"
【8月更文挑战第19天】在Java的IO编程中,BIO、NIO与AIO代表了三种不同的IO处理机制。BIO采用同步阻塞模型,每个连接需单独线程处理,适用于连接少且稳定的场景。NIO引入了非阻塞性质,利用Channel、Buffer与Selector实现多路复用,提升了效率与吞吐量。AIO则是真正的异步IO,在JDK 7中引入,通过回调或Future机制在IO操作完成后通知应用,适合高并发场景。选择合适的模型对构建高效网络应用至关重要。
84 2
|
3月前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
117 0
|
4月前
|
消息中间件 Java Kafka
Java 客户端访问kafka
Java 客户端访问kafka
41 9
下一篇
无影云桌面