其实现在来尝试Memcached的客户端估计会有点过气,因为现在大势基本都在Redis那边。

Memcached Client目前有3种:

  • Memcached Client for Java(已经停止更新)
  • SpyMemcached(已经停止更新)
  • XMemcached(一直更新,且支持客户端分片实现集群,基本现在是它的天下)
    • 高性能
    • 支持完整的Memcached文本协议,二进制协议。
    • 支持JMX,可以通过MBean调整性能参数、动态添加/移除Server、查看统计等。
    • 支持客户端统计
    • 支持Memcached节点的动态增减。
    • 支持Memcached分布:余数分布和一致性哈希分布。
    • 更多的性能调整选项。
    • XMemcached更容易与Spring集成。
    • 支持客户端分片实现集群。

三种API的比较

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

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

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

示例代码

Memcached Client for Java

官网:https://github.com/gwhalin/Memcached-Java-Client

这个已经停止跟新。放弃使用!

import java.util.Date;  import com.danga.MemCached.*;  public class MemcacheManagerForGwhalin {  // 构建缓存客户端  private static MemCachedClient cachedClient;  // 单例模式实现客户端管理类  private static MemcacheManagerForGwhalin INSTANCE = new MemcacheManagerForGwhalin();  private MemcacheManagerForGwhalin() {  cachedClient = new MemCachedClient();  // 初始化SockIOPool,管理memcached的连接池  SockIOPool pool = SockIOPool.getInstance();  // 设置缓存服务器列表,当使用分布式缓存的时,可以指定多个缓存服务器。(这里应该设置为多个不同的服务器)  String[] servers = { "192.168.163.10:11211", "192.168.163.11:11211"  // 也可以使用域名 "server3.mydomain.com:1624"
        };  pool.setServers(servers);  pool.setFailover(true);  pool.setInitConn(10); // 设置初始连接  pool.setMinConn(5);// 设置最小连接  pool.setMaxConn(250); // 设置最大连接  pool.setMaxIdle(1000 * 60 * 60 * 3); // 设置每个连接最大空闲时间3个小时  pool.setMaintSleep(30);  pool.setNagle(false);  pool.setSocketTO(3000);  pool.setAliveCheck(true);  pool.initialize();  }  /** * 获取缓存管理器唯一实例 *  * @return */  public static MemcacheManagerForGwhalin getInstance() {  return INSTANCE;  }  public void add(String key, Object value) {  cachedClient.set(key, value);  }  public void add(String key, Object value, int milliseconds) {  cachedClient.set(key, value, milliseconds);  }  public void remove(String key) {  cachedClient.delete(key);  }  public void remove(String key, int milliseconds) {  cachedClient.delete(key, milliseconds, new Date());  }  public void update(String key, Object value, int milliseconds) {  cachedClient.replace(key, value, milliseconds);  }  public void update(String key, Object value) {  cachedClient.replace(key, value);  }  public Object get(String key) {  return cachedClient.get(key);  }  public static void main(String[] args) {  //将对象加入到memcached缓存  cachedClient.add("keke", "This is a test String");  //从memcached缓存中按key值取对象  String result  = (String) cachedClient.get("keke");  System.out.println(result);  }  }   

Spymemcached

官网:http://code.google.com/p/spymemcached/

这个是不错的选择,但是有吭,在GitHub上找不到。

public class MemcacheManagerForSpy implements IMemcacheManager {  // 缓存客户端  private MemcachedClient memcacheCient;  // Manager管理对象,单例模式  private static MemcacheManagerForSpy INSTANCE = new MemcacheManagerForSpy();  private MemcacheManagerForSpy() {  try {  memcacheCient = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  } catch (IOException e) {  e.printStackTrace();  }  }  public static MemcacheManagerForSpy getInstance() {  return INSTANCE;  }  @Override  public void add(String key, Object value, int milliseconds) {  memcacheCient.add(key, milliseconds, value);  }  @Override  public void add(String key, Object value) {  memcacheCient.add(key, 3600, value);  }  @Override  public void remove(String key, int milliseconds) {  memcacheCient.delete(key);  }  @Override  public void remove(String key) {  memcacheCient.delete(key);  }  @Override  public void update(String key, Object value, int milliseconds) {  memcacheCient.replace(key, milliseconds, value);  }  @Override  public void update(String key, Object value) {  memcacheCient.replace(key, 3600, value);  }  @Override  public Object get(String key) {  return memcacheCient.get(key);  }
}  

Xmemcached

官网:https://github.com/killme2008/xmemcached

操作指南:https://github.com/killme2008/xmemcached/wiki/Xmemcached%20%E4%B8%AD%E6%96%87%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97

目前最火,且时长更新,截止今天都还在更新。

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

参考:

http://blog.csdn.net/xuke6677/article/details/38706501

http://blog.csdn.net/hardy008/article/details/37738901

http://blog.csdn.net/arui_email/article/details/8129400

http://blog.csdn.net/heiyueya/article/details/64441901

http://exceptioneye.iteye.com/blog/1927741

http://blog.csdn.net/hengyunabc/article/details/20735701(缓存失效后的策略处理)

Memcached的几种Java客户端(待实践)相关推荐

  1. Memcached 集群环境Java客户端

    Memcached 集群环境Java客户端 学习了: http://blog.csdn.net/zhouzhiwengang/article/details/53154112 http://guazi ...

  2. Memcached Java客户端编程

    最近一直在做一个项目的前期设计工作,考虑到后期系统的扩展和性能问题也找了很多解决方法,有一个就是用到了数据库的缓存工具memcached(当然该工具并不仅仅局限于数据库的缓存).先简单的介绍下什么是m ...

  3. 缓存系统MemCached的Java客户端优化历程

    來源:http://www.infoq.com/cn/articles/memcached-java 作者 岑文初 发布于 2008年9月27日 上午12时38分 社区 Java 主题 集群与缓存 M ...

  4. memcached java 客户端优化,分布式缓存技术memcached学习系列(五)—— memcached java客户端的使用...

    Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...

  5. Memcached Java客户端2.6.1发布

    Memcached是被广泛使用的分布式缓存技术.不同的语言有不同的Memcached客户端程序,对于Java客户端来说,首推Memcached Java Client(http://github.co ...

  6. Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

     介绍 Memcached java client是官方推荐的最早的memcached java客户端.最新版本:java_memcached-release_2.6.1. 官方下载地址:http ...

  7. memcached客户端_Memcached Java客户端示例

    memcached客户端 Today we will look into Memcached Java client example. Earlier we learned about telnet ...

  8. Java 八种排序算法比较实践

    写这篇文章是因为面试时经常会问这个问题,但是工作中也没用到过,所以一直是一知半解.但是我是属于比较较真的人,这次下定决心要把它们搞明白.知识在于积累,多点知识对自己总是有好处的. 我比较好奇的是,这几 ...

  9. memcached win64位服务端安装和java客户端实例

    项目开发中需要用到memcached缓存记录下来相关操作方便日后复习,如果有错误或遗漏请留言. memcached服务端安装 下载安装包 下载地址 32位系统 1.4.4版本:http://stati ...

最新文章

  1. 动态生成GridView时,加入DataKeyNames属性,回调时出错解决方法
  2. Ubuntu下编译ffmpeg+openh264+x264
  3. python网络爬虫权威指南 豆瓣_福利分享:个人整理的Python书单,从基础到进阶...
  4. [JSOI2018]潜入行动
  5. html页面选择附件实现,实现单文件上传,页面局部刷新_html/css_WEB-ITnose
  6. MYSQL(3)---MySQL的基本概念介绍
  7. ldaptemplate 分页_UI设计干货分享:设计语言 - 侧边导航栏/分页
  8. mysql---存储过程和函数
  9. 在Myeclipse中创建自定义用户类库
  10. R-FCN算法的Caffe实现
  11. CentOS 7下Red5流媒体服务器的搭建与测试
  12. opencv3/C++ 机器学习-EM算法/Expectation Maximization
  13. 高德上线“查岗功能”,你会监视另一半吗?精确到米的那种
  14. 魔兽、星际和红警的比较
  15. 能拿驾照就能通过 Elastic 认证考试!
  16. 计算机网络路由器和交换机之间该如何配置,交换机怎么配置?交换机和路由器有什么区别?...
  17. C语言volatile修饰的到底什么鬼?原来它在嵌入式开发是必须掌握的!
  18. Android 如何获取应用签名
  19. win10 android驱动问题,WIN10 64位 android驱动无法安装
  20. MySQL日志双一配置分析实战

热门文章

  1. 我的Android进阶之旅------Android检测wifi连接状态
  2. Gccgo in GCC 4.7.1[翻译]
  3. ASP.NET中的HTTP模块和处理程序
  4. windows 2003 server无法远程桌面连接
  5. 实例解说 fdisk 使用方法
  6. Spring小学习小结2
  7. tomcat 访问本地C,D盘等文件配置
  8. Android 动态图文混排的常用方法
  9. jQuery 事件的命名空间
  10. push指令的执行过程