membercache java_Java开发中的Memcache原理及实现
转载于http://blog.csdn.net/xzknet/article/details/44066141
http://www.runoob.com/memcached/java-memcached.html 菜鸟教程-简单操作
Memcached 客户端程序
Memcached的java客户端已经存在三种了:
1 官方提供的基于传统阻塞io由Greg Whalin维护的客户端
2 Dustin Sallings实现的基于java nio的Spymemcached
3 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 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
示例代码如下:
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();
}
}
}
membercache java_Java开发中的Memcache原理及实现相关推荐
- 二八原理:软件开发中的二八原理
前面聊了"什么是二八原理",接下来得说说如何运用了.由于本博客主要谈IT技术,显然要先来说说和程序员有关的那些事.为了不至于太抽象,我们以开发文本编辑器为例(这玩意大伙儿都熟悉,省 ...
- 前端路由||路由的基本概念与原理||在开发中,路由分为: 后端路由 前端路由
前端路由 路由的基本概念与原理 vue-router的基本使用 vue-router嵌套路由 vue-router动态路由匹配 vue-router命名路由 vue-router编程式导航 基于vue ...
- java知识点8——垃圾回收原理和算法、通用的分代垃圾回收机制、 JVM调优和Full GC、开发中容易造成内存泄露的操作
垃圾回收原理和算法 内存管理 Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放. 对象空间的分配:使用new关键字创建对象即可 对象空间的释放:将对象赋值null即可 垃圾回 ...
- Java开发中Netty线程模型原理解析!
Java开发中Netty线程模型原理解析,Netty是Java领域有名的开源网络库具有高性能和高扩展性的特点,很多流行的框架都是基于它来构建.Netty 线程模型不是一成不变的,取决于用户的启动参数配 ...
- 理解:iOS开发中锁的实现原理
摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大量的实战经验,另一方面这样的文章相当多,比如 iOS中保证线程安全的几种方式与性能对比.iOS 常见知识点(三):Lock.本文也不 ...
- 微信小程序页面栈_微信小程序开发中的页面栈及页面路由原理
摘要:小程序的开发方兴未艾,本文以图解的形式详细剖析了小程序开发中的页面栈及页面路由原理,对于该原理的深入理解有助于开发者更好地理解小程序的开发框架,更好地开发出功能强大的小程序. 微信小程序(以下简 ...
- Hybrid开发原理分析和开发中常见问题
首先,我们先来罗列一下当前市面上,移动端的各种开发方法 1.Native App 纯原生的app开发模式,android(Java)或者ios(Swift,Oc) 优点: 有最好的性能,有最好的体验 ...
- 字符流和字节流效率问题及原理,以及开发中使用
https://www.cnblogs.com/DONGb/p/7844123.html 先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据 ...
- web开发中的form表单的原理与介绍
据我的理解:表单应该是得包括输入文本框,提交按钮,由他们组合而成就叫做form表单控件(前端开发中会提供多种多样的控件) <form action="Handler1.ashx&quo ...
最新文章
- 特性开关框架 java_关于Mosfet你应当知道的开关特性
- 实现一个可管理、增发、兑换、冻结等高级功能的代币
- SAP的资产负债表、损益表的利润体现
- Python学习笔记(三) Python基础
- 牛客 - 牛牛的最大兴趣组(思维+数论)
- 免安装版的mysql步骤_mysql免安装版的安装方法及步骤
- 开发者看过来,5 行代码实现身份认证,Authing 如何做到的?
- # 解析bt文件_磁力链接和BT种子使用方法
- ubuntu12.04编译rtems doc目录
- roslaunch与param使用
- BAT[阿里、百度、腾讯]等互联网公司数据结构面试题(一) python分析实现
- cat 几行_CAT工具教程与解疑—SDL Trados 2021来了,分享一些简单测评体验
- 图像处理: 可见光波长(wavelength)与RGB之间的转换
- 软件需求收集、挖掘和分析方法
- sqldbx mysql 乱码_使用PLSQL Developer和DbVisualizer、SQLDBx查询oracle数据库时出现乱码...
- 爬虫实现中英文的词语和句子互译
- Linux 删除指定目录下指定后缀名的所有文件
- 蒙特卡洛随机模拟的MATLAB实例解析纪录
- Easyrecovery教您如何一招恢复手机误删照片!
- 【Angular】Angular开发组件
热门文章
- datatable java排序,JSF数据表(h:dataTable)DataModel排序数据
- python无师自通课后答案_python 编程-无师自通—命令行(笔记)
- c语言的返回类型是指针变量吗,C语言-指针类型
- ubuntu16.04配置opencv2、python2、cuda8.0、cudnn以及caffe
- 《只管去做》-如何做靠谱的年度计划
- 做了十年的功能测试,下一步该晋升测试开发还是转行软件开发?
- UAT测试的带队经验
- Android提供了哪些主要UI控件,Android必备:Android UI控件的了解与学习
- yum命令 启用仓库_yum 命令详解-yum仓库配置文件详解
- 魅族android面试题,【魅族小米IT面试题】面试问题:Android… - 看准网