`
蛤蟆仙人
  • 浏览: 118372 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

memcache 几种客户端(转)

 
阅读更多

Memcached的java客户端已经存在三种了:

?  官方提供的基于传统阻塞io由Greg Whalin维护的客户端

?  Dustin Sallings实现的基于java nio的Spymemcached

?  XMemcached


1. 三种API比较
1)      memcached client for java

较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。


2)      spymemcached

A simple, asynchronous, single-threaded memcached client written in java. 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常。


3)      xmemcached

XMemcached同样是基于java nio的客户端,java nio相比于传统阻塞io模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(当然,nio也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比Spymemcached的表现更为优秀,具体可以看这个Java Memcached Clients Benchmark。


2.  建议

由于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));

       }

    }

}


2)      spymemcached

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

       }

    }

}


3)      xmemcached

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

       }

    }

}

分享到:
评论

相关推荐

    CentOS 安装 Memcache 服务器. java 做客户端.

    在IT领域,Memcache是一种广泛使用的高性能分布式内存对象缓存系统,它能够减轻数据库的负担,提高网站或应用的响应速度。本主题将探讨如何在CentOS操作系统上安装Memcache服务器,并利用Java作为客户端与之交互。...

    Windows_Memcache安装(XAMPP+Memcache+PHP)

    Memcache是一种高性能的分布式内存对象缓存系统,主要用于加速动态Web应用程序并减轻数据库负担。该系统维护了一个巨大的hash表,存在于内存中,用于存储各类格式的数据,如图像、视频、文件、数据库检索结果等。...

    MemCache Client端类库

    MemCache是一种广泛应用于Web开发中的分布式内存缓存系统,它能显著提高应用程序的性能,减少对数据库的访问压力。在C++中,开发者通常需要借助客户端类库来与MemCache服务器进行交互。在这个主题中,我们将深入探讨...

    集群环境下memcache解决session共享

    2. `MemcachedClient`:这是连接到memcache服务器的客户端接口,用于执行各种缓存操作。 3. `SerializationStrategy`:session数据通常需要序列化才能存储在memcache中,因此需要一种策略来处理Java对象到字节流的...

    Memcached客户端手册

    配置文件通常包含以下几个部分: - `&lt;memcached&gt;`:根节点。 - `&lt;client&gt;`:定义客户端配置。 - `name`:客户端名称,是程序中使用缓存的唯一标识。 - `compressEnable`:是否启用压缩功能。 - `defaultEncoding...

    阿里云-云数据库Memcache-快速入门.pdf

    - **Memcached Binary Protocol**:云数据库Memcache版支持Memcached的二进制协议,这是一种更高效且功能丰富的协议,相比文本协议,它提供了更好的错误处理和更少的网络开销。 - **SASL认证协议**:安全性是关键...

    MemCacheClientTest

    2. **跨平台兼容性**:由于测试工程涵盖Windows和Linux两种操作系统,我们能够了解到如何在不同的操作系统环境下配置和使用Memcache客户端,以及解决可能出现的兼容性问题。 3. **测试用例设计**:...

    简单的memcache命令

    Memcache是一种高性能、分布式内存对象缓存系统,用于加速动态Web应用通过减轻数据库负担。它通过在内存中缓存数据和对象来减少读写数据库的次数,从而提高网站的速度和响应能力。Memcache支持多种语言客户端,并且...

    session共享之memcache Redis

    在选择memcache还是Redis时,需要考虑几个因素:性能、数据结构需求、持久化、复制等。memcache更适合简单的key-value存储,而Redis提供了更丰富的数据结构和更强大的功能,但可能消耗更多的内存。 总结,session...

    memcache php2.5专用 windows

    Memcached是Memcache服务的后台进程,负责处理客户端的请求。 5. 重启PHP服务以加载新的配置。 **使用Memcache在PHP中:** 在PHP代码中,你可以通过`new Memcache()`创建一个连接实例,然后使用`connect()`或`...

    Memcache缓存安装学习课件及源码

    Memcache是一种广泛应用于Web开发中的分布式内存对象缓存系统,它可以大大提高应用程序的性能,通过将数据存储在内存中,减少对数据库的访问次数,从而降低了系统的响应时间。本课件和源码旨在帮助你深入理解和实践...

    scaling memcache at facebook

    Facebook在实现Memcache扩展方面有着丰富的经验和独特的解决方案,本文将深入探讨Facebook是如何通过改进开源版本的Memcached来构建和扩展分布式键值存储系统,以支撑世界上最大的社交网络。首先,我们来概述...

    监测memcached运行情况的几种方法

    `-v` 会显示错误和警告信息,而 `-vv` 更进一步,会显示每个客户端的命令和响应,这对于调试和故障排查非常有帮助。例如,启动命令可能如下所示: ```bash /usr/local/bin/memcached -d -m 2048 -u root -l 192.168...

    java实现memcache服务器的示例代码

    为什么会有 Memcache 和 Memcached 两种名称?其实 Memcache 是这个项目的名称,而 Memcached 是它服务器端的主程序文件名。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。 ...

    MemcacheDemo

    **Memcache** 是一种广泛使用的分布式内存缓存系统,它能够存储和检索大量数据,通过将数据存储在内存中,可以显著提高读取速度。Memcache的特点包括高性能、低延迟和无持久化存储,适用于处理高并发场景下的快速...

    memcache集群代理软件 magent-0.5.tar.gz

    Memcache是一种高性能的分布式内存对象缓存系统,常用于减轻数据库的负载,通过将数据存储在内存中来快速访问。然而,随着服务规模的扩大,单个Memcache服务器可能无法满足高可用性和扩展性的需求,这时就需要引入...

    memcache学习资料(包含memcache和java_memcache相应的jar)

    `java_memcache`相关的JAR文件通常包含了Java Memcached客户端库,如Xmemcached或spymemcached,这些库提供了API,让Java开发者能够方便地在Java应用中集成和使用Memcached服务。 在Windows环境下部署和使用...

    几种.net调用memcached的开源类库

    提供的压缩包文件"MemCache客户端源码及Demo"可能包含了Enyim.Caching的源代码和演示项目,这将有助于你深入理解如何在实践中使用该类库。通过查看源码和运行示例,你可以更直观地了解Enyim.Caching的工作原理和用法...

    Java开发中的Memcache原理及实现

    Memcache(Memcached)是一种高性能、分布式内存对象缓存系统,最初由Danga Interactive为LiveJournal开发,但很快被很多其他网站采用。Memcached通过在内存中存储数据并提供快速访问,减轻了对数据库等后端系统的...

Global site tag (gtag.js) - Google Analytics