Memcached的几种Java客户端(待实践)
其实现在来尝试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
目前最火,且时长更新,截止今天都还在更新。
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客户端(待实践)的更多相关文章
- Memcached 集群环境Java客户端
Memcached 集群环境Java客户端 学习了: http://blog.csdn.net/zhouzhiwengang/article/details/53154112 http://guazi ...
- JAVA客户端API调用memcached两种方式
1. memcached client for java客户端API:memcached client for java 引入jar包:java-memcached-2.6.2.jar package ...
- memcached学习——常用命令+基于java客户端的3种简单实现(二)
常用命令: memcached设计的原则就是简单,所以支持的命令也不是特别多~ 1.查看memcached的状态,主要用于分析内存的使用状况.优化内存分配等 stats 查看memcached的运行状 ...
- 由Memcached升级到 Couchbase的 Java 客户端的过程记录(一)
背景: 在项目启动的选用了Memcached 作为缓存服务器,采用了Xmemcached作为客户端.在项目中使用了Shiro,为了给 Shiro 配置缓存的时候,采用了开源代码 https://g ...
- 缓存系统MemCached的Java客户端优化历程
Memcached 是什么? Memcached是一种集中式Cache,支持分布式横向扩展.这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端 ...
- 转: memcached Java客户端spymemcached的一致性Hash算法
转自:http://colobu.com/2015/04/13/consistent-hash-algorithm-in-java-memcached-client/ memcached Java客户 ...
- Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用
介绍 Memcached java client是官方推荐的最早的memcached java客户端.最新版本:java_memcached-release_2.6.1. 官方下载地址:http ...
- 读Java并发编程实践中,向已有线程安全类添加功能--客户端加锁实现示例
在Java并发编程实践中4.4中提到向客户端加锁的方法.此为验证示例,写的不好,但可以看出结果来. package com.blackbread.test; import java.util.Arra ...
- 【转载】Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍
转载地址:http://blog.csdn.net/truong/article/details/46711045 关键字:Redis的Java客户端Jedis的八种调用方式(事务.管道.分布式…)介 ...
随机推荐
- iisexpress局域网内调试网站
1.找到IISExpress目录 IISExpress\config\applicationhost.config(注:如果使用vs2015则更改解决方案目录下的.vs文件夹中的该文件) <si ...
- 迅为八核cortex a53开发板android/linux/Ubuntu系统
详情请点击了解:http://www.topeetobard.com 店铺:https://arm-board.taobao.com 核心板: 提供1G和2G内存版本,全机器焊接,杜绝手工,批量无忧. ...
- leetcode_951. Flip Equivalent Binary Trees_二叉树遍历
https://leetcode.com/problems/flip-equivalent-binary-trees/ 判断两棵二叉树是否等价:若两棵二叉树可以通过任意次的交换任意节点的左右子树变为相 ...
- 通过 GCC 学习 OpenMP 框架
OpenMP 框架是使用 C.C++ 和 Fortran 进行并发编程的一种强大方法.GNU Compiler Collection (GCC) V4.4.7 支持 OpenMP 3.0 标准,而 ...
- php+nginx 限制上传文件大小
问题:在后台上传8M大小的图片,上传不成功 nginx返回413,如下图所示: 分析:nginx配置文件或者php中,可上传的大小设置太小了 解决办法------检查nginx和php的配置文件里面的 ...
- 类的封装,property特性,类与对象的绑定方法和非绑定方法,
类的封装 就是把数据或者方法封装起来 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度(快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了,比如你 ...
- 面包屑 asp代码记录 newsmulu_class 内部函数
'id 这里其实是 classId 'mbStr1 最右边的栏目模板 由于是当前本页面 就不带链接了 建议默认值:<span class='mbxC'>$title</span> ...
- 网络爬虫之框架(Scrapy)
Scrapy爬虫框架 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合. 爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫. Scrapy爬虫框架结构:
- tinyxml
在TinyXML中,根据XML的各种元素来定义了一些类: TiXmlBase:整个TinyXML模型的基类. TiXmlAttribute:对应于XML中的元素的属性. ...
- PHP中设置session过期的时间
如何严格限制session在30分钟后过期!1.设置客户端cookie的lifetime为30分钟:2.设置session的最大存活周期也为30分钟:3.为每个session值加入时间戳,然后在程序调 ...