Memcached 客户端程序三种API的比较
来源:互联网 发布:哈尔滨程序员工资 编辑:程序博客网 时间:2024/06/06 17:02
- Memcached 客户端程序
- 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();
- }
- }
- }
0 0
- Memcached 客户端程序三种API的比较
- Memcached 客户端程序三种API的比较
- Memcached 客户端程序三种API的比较
- 三种memcached的JAVA客户端比较
- 三种memcached的JAVA客户端比较
- 三种memcached的JAVA客户端比较
- memcached三种客户端的使用
- Memcached(三)Memcached客户端
- 3中memcached客户端的比较
- java客户端调用Memcached的三种方式(整合)
- memcached java客户端比较
- python memcached 客户端比较
- memcached java客户端比较
- memcached java客户端比较
- Memcached客户端API
- ssdb、redis、memcached三者的比较
- PHP Memcached客户端memcache,memcached比较
- JAVA客户端调用memcached比较
- 项目开发注意事项
- Javascript中bind()方法的使用与实现
- POJ 1985--Cow Marathon【树的直径 && 模板】
- Spring自动检测Bean
- 快速排序算法
- Memcached 客户端程序三种API的比较
- Navgationcontroller 的pop
- eclipse名字的由来及各版本的命名
- 沟通中的情绪管理(演讲稿)
- redhat下svn+apache搭建
- Android如何自定义视图之测量和布局原理(一)
- HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
- 一维邮局问题 + 带权中位数复杂度O(n)算法
- Java有关数组使用工具