其实现在来尝试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. JAVA客户端API调用memcached两种方式

    1. memcached client for java客户端API:memcached client for java 引入jar包:java-memcached-2.6.2.jar package ...

  3. memcached学习——常用命令+基于java客户端的3种简单实现(二)

    常用命令: memcached设计的原则就是简单,所以支持的命令也不是特别多~ 1.查看memcached的状态,主要用于分析内存的使用状况.优化内存分配等 stats 查看memcached的运行状 ...

  4. 由Memcached升级到 Couchbase的 Java 客户端的过程记录(一)

    背景: 在项目启动的选用了Memcached 作为缓存服务器,采用了Xmemcached作为客户端.在项目中使用了Shiro,为了给 Shiro 配置缓存的时候,采用了开源代码   https://g ...

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

    Memcached 是什么? Memcached是一种集中式Cache,支持分布式横向扩展.这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端 ...

  6. 转: memcached Java客户端spymemcached的一致性Hash算法

    转自:http://colobu.com/2015/04/13/consistent-hash-algorithm-in-java-memcached-client/ memcached Java客户 ...

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

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

  8. 读Java并发编程实践中,向已有线程安全类添加功能--客户端加锁实现示例

    在Java并发编程实践中4.4中提到向客户端加锁的方法.此为验证示例,写的不好,但可以看出结果来. package com.blackbread.test; import java.util.Arra ...

  9. 【转载】Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍

    转载地址:http://blog.csdn.net/truong/article/details/46711045 关键字:Redis的Java客户端Jedis的八种调用方式(事务.管道.分布式…)介 ...

随机推荐

  1. org.apache.tomcat.util.net.NioEndpoint,打开的文件过多

    错误信息: 27-Mar-2019 04:20:20.430 严重 [http-nio-8100-Acceptor-0] org.apache.tomcat.util.net.NioEndpoint$ ...

  2. $("[lay-id='"+this.id+"']")

    $("[lay-id='"+this.id+"']") $("[lay-id='"+this.id+"'] .layui-tabl ...

  3. 华硕笔记本无法设置U盘启动,快捷启动不能识别

    最近有不少华硕笔记本用户朋友在使用U大侠装系统时,不管是使用快捷键启动还是BIOS查看,都没有发现U盘启动项,这该怎么办呢?   不要急,既然找不到启动项,那就从设置启动项来解决不就可以了. 第一种方 ...

  4. CAD参数绘制批注(com接口)

    C#中实现代码说明: private void DrawComment() { MxDrawComment com = new MxDrawComment(); MxDrawPoint pt = ne ...

  5. ipv6工具类

    package mapreduce.nat; import java.math.BigDecimal; import java.math.BigInteger; import java.net.Ine ...

  6. ansible中yaml语法应用

    4.yaml语法应用 ansible的playbook编写是yaml语言编写,掌握yaml语法是编写playbook的必要条件,格式要求和Python相似,具体教程参考如下 yaml语言教程 附上一个 ...

  7. layui timeline使用

    使用layui timeline过程记录: layui官网时间线介绍比较少,可能是太简单了,这里把时间线通过请求后台数据.再自动填写到对应区块,进行了封装: 代码如下: function timeli ...

  8. 专题训练——[kuangbin带你飞]最短路练习

    最短路练习 0. Til the Cows Come Home  POJ - 2387 完美的模板题 //#include<Windows.h> #include<iostream& ...

  9. 洛谷——P4053 [JSOI2007]建筑抢修

    P4053 [JSOI2007]建筑抢修 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的 ...

  10. 20181225模拟赛 T1 color (转化思想,分拆思想)

    题目: 有⼀块有 n 段的栅栏,要求第 i 段栅栏最终被刷成颜色 ci .每⼀次可以选择 l, r 把第l . . . r 都刷成某种颜色,后刷的颜⾊会覆盖之前的.⼀共有 m 种颜色,雇主知道只需要用 ...