转:http://acooly.iteye.com/blog/1120770
Memcached Java Client 版本差异
公司目前使用的是2.5.1版本的memcached java client.目前官方最新版本是2.6.1,是基于全新的performance分支,由Schooner中国团队开发。
• 王新根,new.root@gmail.com;
• 李蒙,jowett.lee@gmail.com,IT eye博客地址是:http://menglee.iteye.com 。
与老版本的相比的重大改善:
1. 较之老版本,在性能上有300%左右的提升;
2. 兼容老版本,用户无须修改自己的源代码;
3. 支持多个memcached协议,包括text,udp和binary协议;
4. 支持SASL认证机制;
5. 重新实现的连接池,修复了之前的连接数太多所导致的OutOfMemory异常;
6. 加入了slf4j logger支持,使得开发人员可以方便的记录日志;
7. 支持自定义的对象序列化方法。
对上面官方描述的重大改善,我下面挑选了2个比较实用的改善进行测试验证,毕竟试了才知道,呵呵。
验证:连接池BUG修复
验证:重新实现的连接池,修复了之前的连接数太多所导致的OutOfMemory异常。
验证测试的环境我还是使用上面的性能测试基础环境和代码。
测试环境配置
在上面性能测试基础环境中,我关掉了2个memcached服务,只留下一个11211端口的服务。
Memcached java client客户端参数配置,配置一个服务和连接池配置最大连接数量为5。客户端配置如下:
测试类参数
测试类参数:线程数:20,每个线程处理10000次。基本可以执行个1,2分钟,够监控连接情况了。
2.5.1版本测试
查看测试前memcached服务状态
- telnet localhost 11211
- Stats
运行测试
异常了:
- Exception in thread "pool-1-thread-16" java.lang.OutOfMemoryError: Direct buffer memory
- at java.nio.Bits.reserveMemory(Bits.java:633)
- at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:98)
- at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:288)
查看运行中memcached服务状态:
从测试结果看,大并发的时候,2.5.1版本配置的连接池最大5连接,但是实际是118-10=108个,连接池完全失控,客户端报错java.lang.OutOfMemoryError。BUG!!
2.6.1版本测试
还是先查看下运行测试前,memcached服务器状态:
回到了当前连接为10,不晓得为什么!官方说该参数是当前连接数量,但是我现在明显没有连接,就有10个,而且服务器刚启动就10个,先不管,反正无连接的时候就是10(我用netstat –a看了,的确没有连接)。
运行2.6.1版本的测试
OK,一切正常了,客户端无异常,服务器状态一直都是显示当前连接为15,说明,只有5个连接到memcached服务器,和配置符合。
测试结论:2.5.1的连接池溢出BUG在2.6.1中的确修复了。
验证:性能提升300%
2.6.1版本的测试已经在上面的“性能测试”模块进行了说明,这里使用相同的配置和代码测试2.5.1版本的情况,然后进行对比。
测试服务器就还是小本,服务开3个,分别128M,64M,64M.
Memcahced java client 配置如下:
- memcached-servers=localhost:11211,localhost:11212,localhost:11213
- memcached-weights=3,1,1
- memcached-initConn=5
- memcached-minConn=5
- memcached-maxConn=250
测试类配置:
- /** 线程数 */
- static int THREAD_COUNT = 20;
- /** 每线程执行次数 */
- static int PER_THREAD_COUNT = 10000;
测试结果:
36316 - Test thread: 20; total times: 404056ms;count/thread: 60000
36316 - add success : 197583; success rate: 98.7915%
36316 - set success : 198272; success rate: 99.136%
36316 - get success : 198473; success rate: 992365.06%
36316 - gets success : 198214; success rate: 99.106995%
36316 - cas success : 198821; success rate: 99.4105%
36318 - del success : 199198; success rate: 99.599%
36318 - Average time: 0.33671334
36318 - add TPS: 4952.211162283959; time: 40386ms
36318 - set TPS: 3645.2447781868555; time: 54866ms
36318 - get TPS: 3217.2961842867253; time: 62164ms
36319 - gets TPS: 2691.0294533173665; time: 74321ms
36319 - cas TPS: 2337.5135867977233; time: 85561ms
36319 - del TPS: 2673.510854454069; time: 74808ms
36319 - Average TPS: 2474.9044686875086
2.6.1版本的测试Average TPS:6624.183569375075
2.5.1版本的测试Average TPS: 2474.9044686875086
效率提升:6624.183569375075/2474.9044686875086=2.68倍
不错,的确优化提升了。
后续会提供源代码的分析比对,现在时间不多,先到这里了。
相关推荐
标题中的"memcached java client jar包"指的是用于Java应用程序与Memcached服务器通信的Java库的JAR文件。 在Java应用中使用Memcached客户端,首先需要将`memcached.jar`添加到项目的类路径中。这个JAR文件包含了...
Memcached Java Client API详解.doc
本篇文章将详细介绍两个常用的Java Memcached客户端:xmemcached和memcache-client-forjava。 **1. xmemcached** xmemcached是由Ketoo开发的一个高性能、高可用性的Java Memcached客户端。它提供了丰富的API,支持...
描述中提到"关于memcache 使用的 客户端是memcached client for java 的 JAVA工程",这意味着这个压缩包可能包含了一个Java项目,该项目专门设计用来连接并操作memcached服务器。Java客户端库允许开发人员在Java应用...
memcached的java客户端jar包,方便调用memcached的服务
memcached-client.php
Memcached.ClientLibrary.dll Memcached.ClientLibrary.dll
在Java开发中,我们经常会利用Memcached来存储和检索数据,以此提升应用程序的性能。本文将深入讲解如何在Java环境下集成和使用Memcached。 首先,我们需要在Java项目中引入Memcached的客户端库。常见的Java ...
对于 Java 开发者,`MemCachedClient` 是一个常用的 Memcached 客户端库。这里我们关注的是 `java_memcached-release_2.6.6.jar` 文件,这是 Spymemcached 库的一个版本,它提供了与 Memcached 服务器通信的接口。 ...
《Java与Memcached整合详解——基于Memcached-Java-Client 2.6.1》 在现代Web开发中,缓存技术是提升系统性能的重要手段之一。Memcached是一款高性能、分布式内存对象缓存系统,广泛应用于缓解数据库负载,提高响应...
在实际使用中,通常会开发 Java 客户端库来封装 Memcached 的操作,提供更方便的 API。封装过程可能包括: 1. **连接池管理**:为了提高性能,客户端可以使用连接池管理多个到 Memcached 服务器的连接,避免频繁...
Memcached-Java-Client-3.0.2.jar
最后,Memcached.ClientLibrary是.NET平台上的Memcached客户端库,用于与分布式内存缓存系统Memcached进行交互。Memcached是一种高性能的、分布式的内存对象缓存系统,它可以减轻数据库负载,加速动态Web应用。当你...
Java开发人员可以通过多种库来与Memcached进行交互,例如Spymemcached、Xmemcached和Memcached Java Client等。这些库提供了方便的API,使Java开发者能够轻松地将Memcached集成到他们的应用程序中。 **Spymemcached...
"memcached-client" 指的是Memcached的客户端,是一个轻量级的分布式内存对象缓存系统,广泛用于Web应用以减轻数据库负载。"php" 表明这个客户端是为PHP编程语言设计的。"six4fu" 如前文所述,可能是开发者的标识。 ...
**Memcached Java源码分析——Performance分支** Memcached是一款高性能的分布式内存对象缓存系统,广泛应用于Web应用中,用于缓解数据库的负载。在Java环境中,我们常常使用Java客户端库来与Memcached服务器进行...
### Java使用Memcached简单教程 #### 一、简介 Memcached是一个高性能的分布式内存对象缓存系统,通过减轻数据库负载来加速动态Web应用,提高网站的浏览速度。它通过在内存中缓存数据和对象来减少读取数据库的次数...