- 浏览: 1898898 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
jquery打印指定的div -
GentlemanQc:
...
quartz系列(二)spring3.2.5与quartz2.1.7集群版集成简要说明 -
静夜独窗:
你好,能说一下server.xml增加的配置是怎么影响性能的吗 ...
tomcat7.0性能优化-挑战极限精简版 -
beyondfengyu:
beyondfengyu 写道如果每个客户进程的时间不同步,时 ...
java并发(二十二)分布式锁 -
beyondfengyu:
如果每个客户进程的时间不同步,时间超前的进程是不是更容易得到锁 ...
java并发(二十二)分布式锁
简介
目前常用的Java客户端有3种。
,MemcachedClient:其中笔者亲测,在高并发的时候,容易报异常,Out Of Memory。
spy:的性能比xmemcached略差。
xmemcached:虽然是国产,但是首选,性能和稳定性超强。
xmemcached
代码解析
设置连接池和权重
命名空间
设置一致性哈希算法和FailureMode
添加状态监听器
multi get优化
xmemcached会将连续的单个get请求合并成一个multi get请求作批量获取,提高效率。默认是开启的
连接池设置
在高负载环境下,nio的单连接会遇到瓶颈,此时你可以通过设置连接池来让更多的连接分担memcached的请求负载,从而提高系统的吞吐量。设置连接池通过
连接池通常不建议设置太大,我推荐在0-30之间为好,太大则浪费系统资源,太小无法达到分担负载的目的。
与spring3.2.5的集成
性能优化
性能的调整只能给出一般性的原则,实际情况千差万别,每次调整都需要做实际的测量才能确定是否带来期望的效果。
1、如果你的数据较小,如在1K以下,默认的配置选项已经足够。如果你的数据较大,我会推荐你调整网络层的TCP选项,如设置socket的接收和发送缓冲区更大,启用Nagle算法等等:
默认如果连接超过5秒没有任何IO操作发生即认为空闲并发起心跳检测,你可以调长这个时间:
更多网络层配置选项请参见Configuration类。
2、Xmemcached默认会做两个优化:将连续的单个get合并成一个multi get批量操作获取,将连续的请求合并成socket发送缓冲区大小的buffer发送。
如果你对响应时间比较在意,那么可以将合并的因子减小,或者关闭合并buffer的优化:
如果你对吞吐量更在意,那么也可将合并因子调大,默认是150。但是也不可太大,太大可能导致平均响应时间延长。
3、如果你对心跳检测不在意,也可以关闭心跳检测,减小系统开销
memcachedClient.setEnableHeartBeat(false);
这个关闭,仅仅是关闭了心跳的功能,客户端仍然会去统计连接是否空闲,禁止统计可以通过:
目前常用的Java客户端有3种。
- MemcachedClient
- spymemcached
- xmemcached
,MemcachedClient:其中笔者亲测,在高并发的时候,容易报异常,Out Of Memory。
spy:的性能比xmemcached略差。
xmemcached:虽然是国产,但是首选,性能和稳定性超强。
xmemcached
代码解析
设置连接池和权重
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("10.11.155.26:11211 10.11.155.41:11211 10.10.76.31:11211 10.10.76.35:11211"), new int[] { 1, 1, 1, 1 }); // 设置连接池大小,即客户端个数 builder.setConnectionPoolSize(50);
命名空间
memcachedClient.beginWithNamespace("sx"); //命名空间
设置一致性哈希算法和FailureMode
try { MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddressMap("10.10.160.153:11211,10.10.160.153:11212")); builder.setSessionLocator(new KetamaMemcachedSessionLocator()); builder.setFailureMode(true); // 在此模式下,某个节点挂掉的情况下,往这个节点的请求都将直接抛出MemcachedException的异常。 MemcachedClient client = builder.build(); } catch (Exception e) { System.out.println("自定义异常"); e.printStackTrace(); }
添加状态监听器
memcachedClient.addStateListener(new MemcachedClientStateListener());//此处用的是一个匿名类
multi get优化
memcachedClient.setOptimizeGet(true);
xmemcached会将连续的单个get请求合并成一个multi get请求作批量获取,提高效率。默认是开启的
连接池设置
在高负载环境下,nio的单连接会遇到瓶颈,此时你可以通过设置连接池来让更多的连接分担memcached的请求负载,从而提高系统的吞吐量。设置连接池通过
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:12000")); builder.setConnectionPoolSize(5); MemcachedClient client=builder.build();
连接池通常不建议设置太大,我推荐在0-30之间为好,太大则浪费系统资源,太小无法达到分担负载的目的。
与spring3.2.5的集成
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"> <!-- 配置文件 --> <bean id="configproperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>classpath:application.properties</value> </list> </property> </bean> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"> <property name="properties" ref="configproperties" /> </bean> <!-- memcached初始化 --> <bean id="builder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder"> <constructor-arg> <bean class="net.rubyeye.xmemcached.utils.AddrUtil" factory-method="getAddresses"> <constructor-arg value="${memcached.host}" /> </bean> </constructor-arg> </bean> <bean id="memcachedClient" class="net.rubyeye.xmemcached.MemcachedClient" factory-bean="builder" factory-method="build" destroy-method="shutdown" /> </beans>
性能优化
性能的调整只能给出一般性的原则,实际情况千差万别,每次调整都需要做实际的测量才能确定是否带来期望的效果。
1、如果你的数据较小,如在1K以下,默认的配置选项已经足够。如果你的数据较大,我会推荐你调整网络层的TCP选项,如设置socket的接收和发送缓冲区更大,启用Nagle算法等等:
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(servers)); builder.setSocketOption(StandardSocketOption.SO_RCVBUF, 32 * 1024); // 设置接收缓存区为32K,默认16K builder.setSocketOption(StandardSocketOption.SO_SNDBUF, 16 * 1024); // 设置发送缓冲区为16K,默认为8K builder.setSocketOption(StandardSocketOption.TCP_NODELAY, false); // 启用nagle算法,提高吞吐量,默认关闭
默认如果连接超过5秒没有任何IO操作发生即认为空闲并发起心跳检测,你可以调长这个时间:
builder.getConfiguration().setSessionIdleTimeout(10000); // 设置为10秒;
更多网络层配置选项请参见Configuration类。
2、Xmemcached默认会做两个优化:将连续的单个get合并成一个multi get批量操作获取,将连续的请求合并成socket发送缓冲区大小的buffer发送。
如果你对响应时间比较在意,那么可以将合并的因子减小,或者关闭合并buffer的优化:
memcachedClient.setMergeFactor(50); //默认是150,缩小到50 memcachedClient.setOptimizeMergeBuffer(false); //关闭合并buffer的优化
如果你对吞吐量更在意,那么也可将合并因子调大,默认是150。但是也不可太大,太大可能导致平均响应时间延长。
3、如果你对心跳检测不在意,也可以关闭心跳检测,减小系统开销
memcachedClient.setEnableHeartBeat(false);
这个关闭,仅仅是关闭了心跳的功能,客户端仍然会去统计连接是否空闲,禁止统计可以通过:
builder.getConfiguration().setStatisticsServer(false);
- memcache-client-2.6.1.zip (195.4 KB)
- 下载次数: 9
- memcache-spymemcached-2.7.zip (308.9 KB)
- 下载次数: 8
- memcache-xmemcached-1.3.7.zip (830.1 KB)
- 下载次数: 19
- spring3.2.5-xmemcached-1.4.2_pom.zip (275 KB)
- 下载次数: 17
发表评论
-
redis(四)vs memcache
2017-07-04 14:35 894redis使用单核,memcahe可以使用多核 平均每一个核上 ... -
本地缓存(一)ehcache/jcs/cache4j/jcs的性能测试与使用场景分析
2015-09-05 22:02 4489前言 之前在网上看过几篇本地缓存的性能测 ... -
memcached(十九)并发原语CAS与GETS操作
2014-06-28 23:43 13433最近笔者自己的项目中,遇到了乐观锁的需求。但是redi ... -
memcached(十八)缓存业务逻辑
2014-03-13 14:05 2135在高并发的网站只用,缓存的作用之一,就是保存持久层的查询结果。 ... -
memcached(十七)协议命令格式
2014-01-16 23:06 2007memcached的管理使用的是telnet 登录服务器 te ... -
memcached(十六)缓存基本知识
2014-01-12 23:52 1606缓存简介 缓存,让数据更接近于使用者; 工作机制是:先从缓存中 ... -
memcached(十五)binary vs text protocols
2014-01-12 11:30 6360memcached服务端支持2种传输协议,还有一种XMemca ... -
memcached(十四)memcached单次请求性能分析
2014-01-12 01:46 2436试验环境和IP 服务器:10.10.64.83 客户端:10. ... -
memcached(二十)Dogpile效应
2015-10-03 09:34 1885Redis/Memcached高并发访问下的缓存失效时 ... -
memcached(十三)memcached内存占用分析
2013-12-06 21:30 1643最近又在研究memcached,如果想进一步研究如何使 ... -
redis(三)主要数据结构
2013-11-26 10:06 1156值的长度不能超过1GB 计数器 原子递增:incr map ... -
redis(二)主从复制
2013-11-26 10:05 1379一、Redis的Replication: Redis ... -
redis(一)初识
2013-11-26 10:03 1431官网 http://redis.io/ 中国社区 http:/ ... -
memcached(十二)1.4的stats命令
2013-11-08 10:52 2551STAT pid ... -
memcached(十一)memcached-session-manager
2013-11-08 23:08 1752介绍 memcached-session-manager是将t ... -
memcached(十)simple-spring-memcached
2013-11-08 22:22 3747简介 simple-spring-memcached是spri ... -
memcached(八)一致性哈希高级应用
2013-11-07 09:44 5268简介 一致性哈希 ... -
memcached(七)failure模式和standby节点
2013-11-06 23:37 2273关于failure模式,可以看下memcached官方 ... -
memcached(三)内存管理
2013-11-05 21:16 5008基本概念:slab,pa ... -
memcached(六)调优经验
2013-09-25 22:32 3719一 监控 查看memcahe服务 ...
相关推荐
6. **客户端连接**:安装完成后,你可以在你的应用程序中使用各种编程语言(如PHP、Python、Java等)的memcached客户端库来连接并操作这个缓存服务。 7. **监控与管理**:虽然memcached本身没有图形界面管理工具,...
本文将围绕标题“Memcached-Java-Client-release_2.6.1.zip”展开,详细讲解如何在Java项目中整合并使用Memcached客户端库。 1. **Memcached简介** - Memcached是一种轻量级、基于内存的键值对存储系统,用于存储...
本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...
`java_memcached-release_1.6.zip` 文件则是Java语言的Memcached客户端库,允许Java开发者方便地与Memcached服务器进行交互。这个客户端库通常称为spymemcached,它提供了丰富的API,使开发者可以轻松地存储和检索...
使用Java Memcached驱动包的基本步骤通常包括:导入`mem-java.jar`库,创建Memcached客户端实例,配置服务器列表,然后调用相应接口进行数据操作。同时,可以结合`mem-doc`中的文档来获取详细的使用指南和API说明。 ...
在本例中,我们关注的是`java_memcached-release_2.5.1.jar`这个文件,这是一个包含了Java Memcached客户端库的JAR(Java Archive)包,版本号为2.5.1。 Java Memcached客户端库由Danga Interactive开发,该公司是...
Java开发中常用的Memcached客户端是spymemcached,它提供了简单易用的API来操作Memcached服务器。安装该库,可以通过Maven添加依赖: ```xml <groupId>net.spy</groupId> <artifactId>spymemcached <version>...
通常,这份文档会指导你如何配置Java Memcached客户端,如何连接到运行的Memcached服务,以及如何进行基本的缓存操作,如put(存储)、get(获取)和delete(删除)数据。此外,可能还会涵盖高级主题,如设置超时、...
Memcached客户端是分布式内存缓存系统Memcached与应用程序交互的重要组成部分。这个系统广泛应用于Web开发,用于减轻数据库负载,提高网站性能。Memcached通过在内存中存储数据,提供快速的数据访问,尤其适用于处理...
- 接着,在Java代码中创建一个Memcached客户端实例,连接到服务器: ```java MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); ``` 4. **基本操作** - 存储数据:...
2. **初始化连接**:在代码中,首先需要创建一个Memcached客户端实例,通常使用Spymemcached或XMemcached等客户端库,指定memcached服务器的地址和端口。 3. **操作缓存**:现在你可以开始进行基本的缓存操作,如`...
安装完毕后,你可以通过以下步骤创建一个Memcached客户端并建立连接: 1. 创建Memcached客户端实例: ```java MemcachedClient client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); ``` ...
2. **java_memcached-release_2.6.5.jar**:这是 Memcached 的Java客户端库,提供了与 Memcached 服务器交互的API。它实现了 Memcached 的协议,允许Java开发者添加、删除、更新和检索缓存中的数据。这个库还包含了...
- **客户端程序**:根据Memcached协议,用户可以自行开发客户端程序,或者使用官方提供的Perl、C、Java、Python、PHP等语言的客户端程序。 - **安装示例**:以Perl客户端程序为例,下载源码后,使用`perl Makefile....
1. **客户端库**: 对于Windows下的开发,你需要找到支持Windows的Memcached客户端库,例如PHP、Python、Java或.NET的扩展库。 2. **API接口**: 学习并理解Memcached的API,包括基本的set(设置)、get(获取)、...
这是Spymemcached的一个版本,它是一个高效、轻量级的Java Memcached客户端。Spymemcached提供了一个简单的API,允许开发者方便地与Memcached服务器通信。这个版本2.6.3可能包含以下特性: - 支持最新的Memcached...
Java社区提供了多个Memcached客户端库,如spymemcached、xmemcached和smallest-epsilon等。这里以spymemcached为例,因为它简洁易用且广泛被采用。 3. **添加依赖** 在你的项目中,通过Maven或Gradle添加...
spymemcached是Java版的memcached客户端,它通过Socket通信协议与memcached服务器进行交互。其核心组件包括: 1. **MemcachedClient**: 这是客户端的主要类,负责建立与memcached服务器的连接,执行各种操作。 2. ...
Java Memcached是一个基于...总之,`java_memcached-release_2.5.0.zip`是一个完整的Java Memcached客户端库,包含了一切必要的文件和文档,便于开发者在Java项目中集成和使用Memcached,提升应用的性能和响应速度。
二、Java环境下的Memcached客户端库 1. Spymemcached:由LinkedIn开发的Java客户端,它提供了简单的API接口,支持异步操作,性能出色。 2. Xmemcached:另一个流行的Java客户端,它提供了丰富的功能,如支持命令行...