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();
}
}
}
分享到:
相关推荐
在IT领域,Memcache是一种广泛使用的高性能分布式内存对象缓存系统,它能够减轻数据库的负担,提高网站或应用的响应速度。本主题将探讨如何在CentOS操作系统上安装Memcache服务器,并利用Java作为客户端与之交互。...
Memcache是一种高性能的分布式内存对象缓存系统,主要用于加速动态Web应用程序并减轻数据库负担。该系统维护了一个巨大的hash表,存在于内存中,用于存储各类格式的数据,如图像、视频、文件、数据库检索结果等。...
MemCache是一种广泛应用于Web开发中的分布式内存缓存系统,它能显著提高应用程序的性能,减少对数据库的访问压力。在C++中,开发者通常需要借助客户端类库来与MemCache服务器进行交互。在这个主题中,我们将深入探讨...
2. `MemcachedClient`:这是连接到memcache服务器的客户端接口,用于执行各种缓存操作。 3. `SerializationStrategy`:session数据通常需要序列化才能存储在memcache中,因此需要一种策略来处理Java对象到字节流的...
配置文件通常包含以下几个部分: - `<memcached>`:根节点。 - `<client>`:定义客户端配置。 - `name`:客户端名称,是程序中使用缓存的唯一标识。 - `compressEnable`:是否启用压缩功能。 - `defaultEncoding...
- **Memcached Binary Protocol**:云数据库Memcache版支持Memcached的二进制协议,这是一种更高效且功能丰富的协议,相比文本协议,它提供了更好的错误处理和更少的网络开销。 - **SASL认证协议**:安全性是关键...
2. **跨平台兼容性**:由于测试工程涵盖Windows和Linux两种操作系统,我们能够了解到如何在不同的操作系统环境下配置和使用Memcache客户端,以及解决可能出现的兼容性问题。 3. **测试用例设计**:...
Memcache是一种高性能、分布式内存对象缓存系统,用于加速动态Web应用通过减轻数据库负担。它通过在内存中缓存数据和对象来减少读写数据库的次数,从而提高网站的速度和响应能力。Memcache支持多种语言客户端,并且...
在选择memcache还是Redis时,需要考虑几个因素:性能、数据结构需求、持久化、复制等。memcache更适合简单的key-value存储,而Redis提供了更丰富的数据结构和更强大的功能,但可能消耗更多的内存。 总结,session...
Memcached是Memcache服务的后台进程,负责处理客户端的请求。 5. 重启PHP服务以加载新的配置。 **使用Memcache在PHP中:** 在PHP代码中,你可以通过`new Memcache()`创建一个连接实例,然后使用`connect()`或`...
Memcache是一种广泛应用于Web开发中的分布式内存对象缓存系统,它可以大大提高应用程序的性能,通过将数据存储在内存中,减少对数据库的访问次数,从而降低了系统的响应时间。本课件和源码旨在帮助你深入理解和实践...
Facebook在实现Memcache扩展方面有着丰富的经验和独特的解决方案,本文将深入探讨Facebook是如何通过改进开源版本的Memcached来构建和扩展分布式键值存储系统,以支撑世界上最大的社交网络。首先,我们来概述...
`-v` 会显示错误和警告信息,而 `-vv` 更进一步,会显示每个客户端的命令和响应,这对于调试和故障排查非常有帮助。例如,启动命令可能如下所示: ```bash /usr/local/bin/memcached -d -m 2048 -u root -l 192.168...
为什么会有 Memcache 和 Memcached 两种名称?其实 Memcache 是这个项目的名称,而 Memcached 是它服务器端的主程序文件名。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。 ...
**Memcache** 是一种广泛使用的分布式内存缓存系统,它能够存储和检索大量数据,通过将数据存储在内存中,可以显著提高读取速度。Memcache的特点包括高性能、低延迟和无持久化存储,适用于处理高并发场景下的快速...
Memcache是一种高性能的分布式内存对象缓存系统,常用于减轻数据库的负载,通过将数据存储在内存中来快速访问。然而,随着服务规模的扩大,单个Memcache服务器可能无法满足高可用性和扩展性的需求,这时就需要引入...
`java_memcache`相关的JAR文件通常包含了Java Memcached客户端库,如Xmemcached或spymemcached,这些库提供了API,让Java开发者能够方便地在Java应用中集成和使用Memcached服务。 在Windows环境下部署和使用...
提供的压缩包文件"MemCache客户端源码及Demo"可能包含了Enyim.Caching的源代码和演示项目,这将有助于你深入理解如何在实践中使用该类库。通过查看源码和运行示例,你可以更直观地了解Enyim.Caching的工作原理和用法...
Memcache(Memcached)是一种高性能、分布式内存对象缓存系统,最初由Danga Interactive为LiveJournal开发,但很快被很多其他网站采用。Memcached通过在内存中存储数据并提供快速访问,减轻了对数据库等后端系统的...