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
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();
读写简单类型
测试方法:开N个线程 ,每个线程set(或者get、delete) 10000次,表格如下(数据为tps,仅供参考)
spymemcached
xmemcached
delete
delete
11015
11227
11449
10440
19838
20685
22727
13239
24113
14382
25427
22646
26700
18068
29046
18259
结论:显然在简单类型的读写上,spymemcached全面占优,xmemcached唯一的亮点在于高并发下get的效率超过了spymemcached。对于连续的get操作,xmemcached将合并成一个批量的get操作提交,从而提高效率。
读写100个元素的map,map的value是个自定义类,启动N个线程,每个线程set(或者get、delete) 100次,表格如下
spymemcached
xmemcached
结论:在复杂对象的读写上,xmemcached全面占优。两者的CPU和内存占用差不多,肉眼观察做不得准。比较奇怪的是spymemcached的set竟然那么慢。
Xmemcached是一个高性能的基于javanio的memcached客户端。在经过三个RC版本后,正式发布1.10-final版本。[b]xmemcached特性一览:[/b]1、高性能2、支持完...
来自:
qtlkw
用URLConnection模拟压力测试启动250个线程压我的首页首页的大多数数据都缓存了只有两句sql没缓存参见[url]http://xuliangyong.iteye.com/blog/2740...
来自:
xly_971223的专栏
xMemcached是memcached的一个java客户端,基于javanio,支持memcached的所有协议。本文简要介绍xMemcached的基本用法,以及与Spring的集成配置。/***X...
来自:
zhanghongzheng3213的专栏
packagememcached;importjava.io.IOException;importjava.net.InetSocketAddress;importnet.spy.memcached....
来自:
三也_攻城狮
spymemcached是一个memcached的客户端http://code.google.com/p/spymemcached/ 测试代码如下:1.SpyMemcachedConstantsimp...
来自:
星星的技术专栏
Xmemcached是一个高性能的基于javanio的memcached客户端。在经过三个RC版本后,正式发布1.10-final版本。 xmemcached特性一览:1、高性能2、支持完整的memc...
来自:
skiof007的专栏
memcached-java客户端xmemcached使用总结标签: memcachedxmemcached分布式缓存spring2015-01-3009:42 3609人阅读 评论(0) 收藏 举报...
来自:
evilcry2012的专栏
一、XMemcached简介 XMemcached是一个新javamemcachedclient。也许你还不知道memcached是什么?可以先看看这里。简单来说,Memcached 是一个高性能的分...
来自:
Java我人生的技术博客
转自:http://blog.csdn.net/hjm4702192/article/details/7894080Memcach什么是MemcacheMemcache集群环境下缓存解决方案Memca...
来自:
PR
memcache常用java客户端有三个:1、memcachedclientforjava 2、spymemcached 3、xmemcached据说xmemcached上述三者中最优秀的。 x...
来自:
李博/Alex的技术世界
面临的问题 对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题。特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰值已经达到500的时候,那你的程序运行离崩溃的边缘...
来自:
tiedao123456789的专栏
一、简介spymemcached 是一个 memcache 的客户端, 使用 NIO 实现。分析 spymemcached 需要了解 NIO,memcached使用,memcached协议,参考资料中...
Memcached客户端程序Memcached的java客户端已经存在三种了:?官方提供的基于传统阻塞io由GregWhalin维护的客户端?DustinSallings实现的基于javanio的Sp...
来自:
陈鑫霖(Java)
翠花,上图,首先是容器类和自定义对象的get、set在不同并发下的表现 很明显,在linux下,spymemcached读写复杂对象的效率远远超过在windows下的表现,xmemcached在两...
来自:
庄周梦蝶
memcached的服务端产品本身功能简洁,简单易用,但是玩法多种多样。但是事实上它是一个“伪分布式”解决方案,它本身并没有实现服务端分布式(服务端的memcachedserver之间是不能通信的),...
来自:
风轻云淡
memcached是应用最广的开源cache产品,它本身不提供分布式的解决方案,我猜想一方面它想尽量保持产品简单高效,另一方面cache的key-value的特性使得让memcached分布式起来比较...
来自:
走向架构师之路
变更历史2010-06-22添加客户端分布和SASL验证两节,更新spring配置一节。2010-06-23添加maven依赖说明2010-10-171.2.6released2011-01-041....
来自:
YKBlog.top - coder yangkai
用户指南0.3版本变更历史XMemcached简介XMemcached的主要特性高性能支持完整的协议支持客户端分布允许设置节点权重动态增删节点支持JMX与Spring框架和Hibernate-memc...
来自:
编程语言小筑
最近发现新来的研发同学对springboot集成memcached等技术不是很了解,因此,我抽空闲时间写一个这样的文章,希望帮助大家更快的上手这些基本功,正所谓工欲善其事必先利其器。这里是demo链接...
来自:
t1016465601的博客
1. HashMap概述 HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变...
来自:
z69183787的专栏
[code="java"]publicOperationFutureset(Stringkey,intexp,Objecto){returnasyncStore(StoreType...
来自:
xly_971223的专栏
Spymemcached是一个Memcached(一个高性能内存对象缓存系统)的开源客户端程序。其他MC客户端还有xmemcached、MemcachedClientforJava等。我们使用MC客户...
来自:
Venus专栏
Memcache作为一个著名的缓存项目支持多种语言和多种形式的客户端,作为一个Java开发人员,我们必须了解各种客户端的不同,这有利于我们在技术选型的时候充分的评估其优缺点,从而选择最佳的缓存产品以及...
来自:
winter2summer的博客
配置好Magent+memcached后,很明显数据之间的输入与输出都是通过代理服务器的,magent是做代理服务器的很明显java在memecached的调用驱动在magent同样适用.这里选择Sp...
来自:
suchy
转载请注明出处:http://blog.csdn.net/tang9140/article/details/43445511前言本文主要讲述如何使用XMemcached客户端与Memcached服务端...
来自:
qian9140的博客
Memcache java jar 包 java_memcached-release_2.5.1.jar import com.danga.MemCached.MemCachedClient; imp
a.xmemcached简介b.xmemcached的分布式c.xmemcached支持的存储对象d.xmemcached的容错性e.xmemcached的性能测试 由于memcached可以与sp...
来自:
技术创造未来,程序改变生活。
2009-07-2017:10Xmemcached使用之与Spring整合1简介Xmemcached是一个高性能的基于javanio的memcached客户端。在经过三个RC版本后,正式发布1.10-...
来自:
叶知秋
一、连接池设置在高负载环境下,nio的单连接也会遇到瓶颈,此时你可以通过设置连接池来让更多的连接分担memcached的请求负载,从而提高系统的吞吐量。设置连接池通过Codehighlightingp...
来自:
火侬智能科技