Memcache的三种Java客户端的对比和选择
2017-03-21 15:02
253 查看
Memcache作为一个著名的缓存项目支持多种语言和多种形式的客户端,作为一个Java开发人员,我们必须了解各种客户端的不同,这有利于我们在技术选型的时候充分的评估其优缺点,从而选择最佳的缓存产品以及缓存客户端,最终对技术选型进行合理的决策。
1.官方提供的基于传统阻塞io由Greg Whalin维护的客户端memcached client for java
网址:http://www.whalin.com/memcached
最新版本:java_memcached-release_2.0.1
特点: 较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定,使用阻塞IO,不支持CAS操作。
使用示例:
2.Dustin Sallings实现的基于java nio的Spymemcached
网址:http://code.google.com/p/spymemcached/
最新版本:memcached-2.1.jar
特点: A simple, asynchronous, single-threaded memcached client written in java. 用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常,支持CAS操作。
操作示例:
用spymemcached将对象存入缓存:
用spymemcached从缓存中取得对象:
3 XMemcached
XMemcached同样是基于Java NIO的客户端,Java NIO相比于传统阻塞IO模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而NIO仅需要一个连接即可(当然,NIO也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此 XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比 Spymemcached的表现更为优秀。
总结: Java Memcache Client for Java应用最广泛,也是当前最稳定的客户端, 在线上系统大量的使用此客户端。当然,SpyMemecache和XMemcache由于使用的是NIO的IO模型,性能更高,稳定性也在提高,在性能需求较高的情况下也是比较不错的选择。
1.官方提供的基于传统阻塞io由Greg Whalin维护的客户端memcached client for java
网址:http://www.whalin.com/memcached
最新版本:java_memcached-release_2.0.1
特点: 较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定,使用阻塞IO,不支持CAS操作。
使用示例:
import com.danga.MemCached.*; import org.apache.log4j.*; public class TestMemcached { 有 public static void main(S有ing[] args) { /*初始化SockIOPool,管理memcached的连接池*/ String[] servers = { "192.168.1.20:12111" }; 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 < 10; 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.Dustin Sallings实现的基于java nio的Spymemcached
网址:http://code.google.com/p/spymemcached/
最新版本:memcached-2.1.jar
特点: A simple, asynchronous, single-threaded memcached client written in java. 用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常,支持CAS操作。
操作示例:
用spymemcached将对象存入缓存:
import java.net.InetSocketAddress; import java.util.concurrent.Future; import net.spy.memcached.MemcachedClient; public class MClient { public static void main(String[] args){ try{ /*建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号*/ MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.1.20", 12111)); 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(); } } }
用spymemcached从缓存中取得对象:
import java.net.InetSocketAddress; import java.util.concurrent.Future; import net.spy.memcached.MemcachedClient; public class MClient { public static void main(String[] args){ try{ /*建立MemcachedClient 实例,并指定memcached服务的IP地址和端口号*/ MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.1.20", 12111)); /*按照key值从memcached中查找缓存,不存在则返回null */ Object b = mc.get("neea:testDaF:ksIdno "); mc.shutdown(); } catch(Exception ex){ ex.printStackTrace(); } } }
3 XMemcached
XMemcached同样是基于Java NIO的客户端,Java NIO相比于传统阻塞IO模型来说,有效率高(特别在高并发下)和资源耗费相对较少的优点。传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而NIO仅需要一个连接即可(当然,NIO也是可以做池化处理),相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。因此 XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)Xmemcached比 Spymemcached的表现更为优秀。
总结: Java Memcache Client for Java应用最广泛,也是当前最稳定的客户端, 在线上系统大量的使用此客户端。当然,SpyMemecache和XMemcache由于使用的是NIO的IO模型,性能更高,稳定性也在提高,在性能需求较高的情况下也是比较不错的选择。
相关文章推荐
- Memcache的三种Java客户端的对比和选择
- [转载]转Java 几个memcached 连接客户端对比 选择
- memcache原生,php客户端,java客户端的性能对比
- [转载]转Java 几个memcached 连接客户端对比 选择
- CentOS 安装 Memcache 服务器. java 做客户端.
- 关于PHP客户端 memcache 和 memcahed 的选择
- java:三种经典大排序汇总,冒泡,插入,选择
- 一个javamemcache客户端,多线程情况下很强悍
- HTML、Swing还是XML,Java客户端工具选择?(四)
- Redis和Memcache对比及选择
- memcache Java客户端调用小例子
- HTML、Swing还是XML,Java客户端工具选择?(三)
- 三种memcached的JAVA客户端比较
- HTML、Swing还是XML,Java客户端工具选择?(四)
- Redis和Memcache对比及选择
- memcache Java客户端调用小例子
- Java/JSP获得客户端网卡MAC地址的三种方法解析
- memcache java客户端优化历程
- java中的三种排序方法使用:选择排序,冒泡排序,sort方法排序。
- 选择,插入,希尔,快速,堆,归并排序六种排序方式的Java 实现和性能对比(付代码)