- 浏览: 4402804 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (163)
- 职场 && 心情 (22)
- Java/Basic (17)
- Java/Compression (7)
- Java/Security (20)
- Java/Maven (3)
- Java/Cache (11)
- Eclipse (4)
- Spring (19)
- ORM/Hibernate (2)
- ORM/iBatis (3)
- DB/NoSQL (11)
- DB/MySQL (7)
- DB/MS SQL Server (4)
- OS/Linux (11)
- OS/Mac (7)
- C/C++ (4)
- Server Architecture/Basic (13)
- Server Architecture/Distributed (17)
- Moblie/Andriod (2)
- WebService (3)
- Objective-C (1)
- Html (1)
- 设计模式 (1)
- Scala (0)
- Kafka (1)
最新评论
-
w47_csdn:
证书安装:在"浏览"选项中选择" ...
Java加密技术(九)——初探SSL -
w47_csdn:
spiritfrog 写道你好,我按照你的步骤,tomcat中 ...
Java加密技术(九)——初探SSL -
liuyachao111:
11楼说的对 用@ControllerAdvicepublic ...
Spring 注解学习手札(八)补遗——@ExceptionHandler -
irayslu:
作者你好, 我把你的源码放在jdk6, jdk7 中运行正常, ...
Java加密技术(五)——非对称加密算法的由来DH -
夏季浅忆-卖小子:
为什么不能解压rar格式的压缩包呢
Java压缩技术(三) ZIP解压缩——Java原生实现
Memcached笔记——(二)XMemcached&Spring集成
今天研究Memcached的Java的Client,使用XMemcached 1.3.5,做个简单的测试,并介绍如何与Spring集成。
相关链接:
Memcached笔记——(一)安装&常规错误&监控
Memcached笔记——(二)XMemcached&Spring集成
Memcached笔记——(三)Memcached使用总结
Memcached笔记——(四)应对高并发攻击
一、Memcached Client简要介绍
Memcached Client目前有3种:
这三种Client一直存在各种争议:
用数据来说话,参考官方性能对比:
Memcached Client for Java:https://github.com/gwhalin/Memcached-Java-Client/wiki/PERFORMANCE
XMemcached:http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html
二、XMemcached特性
XMemcached特性:
此外,XMemcached更容易与Spring集成。而且,属于中国原创!
三、XMemcached简单实现
MemcachedClientBuilder是MemcachedClient核心接口,用来控制Client的构建(build()方法)和关闭(shutdown()方法)。
XMemcachedClientBuilder一般通过构造方法配置地址列表,通常还要配置权重,代码如下:
不过这哥们如果用this()可以省点代码, 还有给加点注释吧!
此外,还需要设置连接池大小,使用二进制协议/文本协议等。
通过build()方法获得MemcachedClient
然后就可以通过Memcached进行set、get、replace、delete等Memcached操作了!
上代码:
四、XMemcached与Spring集成
XMemcached与Spring集成可以参考http://code.google.com/p/xmemcached/wiki/Spring_Integration,这里只说最常用的方法。
memcached.properties做基本配置:
XML配置文件:
这里的memcachedClientBuilder节点完成MemcachedClientBuilder,然后通过memcachedClient节点配置factory-method,调用MemcachedClientBuilder的build()方法产生MemcachedClient,并配置destroy-method进行关闭。
不过我还是疑惑,这里的异常由谁来处理?Spring容器吗? 或者需要另一个代理Bean包装一下?
有了Spring容器支持,我们不需要在代码中进行配置,也不需要重复调用build()跟shutdown()方法,这些操作交给Spring来完成。
代码如下:
相关链接:
Memcached笔记——(一)安装&常规错误&监控
Memcached笔记——(二)XMemcached&Spring集成
Memcached笔记——(三)Memcached使用总结
Memcached笔记——(四)应对高并发攻击
XMemcached User Guide
相关链接:
Memcached笔记——(一)安装&常规错误&监控
Memcached笔记——(二)XMemcached&Spring集成
Memcached笔记——(三)Memcached使用总结
Memcached笔记——(四)应对高并发攻击
一、Memcached Client简要介绍
Memcached Client目前有3种:
这三种Client一直存在各种争议:
- Memcached Client for Java 比 SpyMemcached更稳定、更早、更广泛;
- SpyMemcached 比 Memcached Client for Java更高效;
- XMemcached 比 SpyMemcache并发效果更好。
用数据来说话,参考官方性能对比:
Memcached Client for Java:https://github.com/gwhalin/Memcached-Java-Client/wiki/PERFORMANCE
XMemcached:http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html
二、XMemcached特性
XMemcached特性:
- 高性能
- 支持完整的memcached文本协议,二进制协议。
- 支持JMX,可以通过MBean调整性能参数、动态添加/移除server、查看统计等。
- 支持客户端统计
- 支持memcached节点的动态增减。
- 支持memcached分布:余数分布和一致性哈希分布。
- 更多的性能调整选项。
此外,XMemcached更容易与Spring集成。而且,属于中国原创!
三、XMemcached简单实现
MemcachedClientBuilder是MemcachedClient核心接口,用来控制Client的构建(build()方法)和关闭(shutdown()方法)。
XMemcachedClientBuilder一般通过构造方法配置地址列表,通常还要配置权重,代码如下:
public XMemcachedClientBuilder(List<InetSocketAddress> addressList) { if (addressList != null) { for (InetSocketAddress addr : addressList) { this.addressMap.put(addr, null); } } } public XMemcachedClientBuilder(List<InetSocketAddress> addressList, int[] weights) { if (addressList != null) { for (InetSocketAddress addr : addressList) { this.addressMap.put(addr, null); } } this.weights = weights; }
不过这哥们如果用this()可以省点代码, 还有给加点注释吧!
此外,还需要设置连接池大小,使用二进制协议/文本协议等。
通过build()方法获得MemcachedClient
然后就可以通过Memcached进行set、get、replace、delete等Memcached操作了!
上代码:
import static junit.framework.Assert.*; import java.io.IOException; import java.util.concurrent.TimeoutException; import net.rubyeye.xmemcached.MemcachedClient; import net.rubyeye.xmemcached.MemcachedClientBuilder; import net.rubyeye.xmemcached.XMemcachedClientBuilder; import net.rubyeye.xmemcached.command.BinaryCommandFactory; import net.rubyeye.xmemcached.exception.MemcachedException; import net.rubyeye.xmemcached.utils.AddrUtil; import org.junit.Test; public class MemcachedClientTest { @Test public void test() { 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); // 宕机报警 builder.setFailureMode(true); // 使用二进制文件 builder.setCommandFactory(new BinaryCommandFactory()); MemcachedClient memcachedClient = null; try { memcachedClient = builder.build(); try { // 设置/获取 memcachedClient.set("zlex", 36000, "set/get"); assertEquals("set/get", memcachedClient.get("zlex")); // 替换 memcachedClient.replace("zlex", 36000, "replace"); assertEquals("replace", memcachedClient.get("zlex")); // 移除 memcachedClient.delete("zlex"); assertNull(memcachedClient.get("zlex")); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MemcachedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (memcachedClient != null) { try { memcachedClient.shutdown(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
四、XMemcached与Spring集成
XMemcached与Spring集成可以参考http://code.google.com/p/xmemcached/wiki/Spring_Integration,这里只说最常用的方法。
memcached.properties做基本配置:
#连接池大小即客户端个数 memcached.connectionPoolSize=50 memcached.failureMode=true #server1 memcached.server1.host=10.11.155.26 memcached.server1.port=11211 memcached.server1.weight=4 #server2 memcached.server2.host=10.11.155.41 memcached.server2.port=11211 memcached.server2.weight=3 #server3 memcached.server3.host=10.10.76.31 memcached.server3.port=11211 memcached.server3.weight=2 #server4 memcached.server4.host=10.10.76.35 memcached.server4.port=11211 memcached.server4.weight=1
XML配置文件:
<?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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- http://code.google.com/p/xmemcached/wiki/Spring_Integration --> <context:property-placeholder location="memcached.properties" /> <bean id="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder" p:connectionPoolSize="${memcached.connectionPoolSize}" p:failureMode="${memcached.failureMode}"> <!-- XMemcachedClientBuilder have two arguments.First is server list,and second is weights array. --> <constructor-arg> <list> <bean class="java.net.InetSocketAddress"> <constructor-arg> <value>${memcached.server1.host}</value> </constructor-arg> <constructor-arg> <value>${memcached.server1.port}</value> </constructor-arg> </bean> <bean class="java.net.InetSocketAddress"> <constructor-arg> <value>${memcached.server2.host}</value> </constructor-arg> <constructor-arg> <value>${memcached.server2.port}</value> </constructor-arg> </bean> <bean class="java.net.InetSocketAddress"> <constructor-arg> <value>${memcached.server3.host}</value> </constructor-arg> <constructor-arg> <value>${memcached.server3.port}</value> </constructor-arg> </bean> <bean class="java.net.InetSocketAddress"> <constructor-arg> <value>${memcached.server4.host}</value> </constructor-arg> <constructor-arg> <value>${memcached.server4.port}</value> </constructor-arg> </bean> </list> </constructor-arg> <constructor-arg> <list> <value>${memcached.server1.weight}</value> <value>${memcached.server2.weight}</value> <value>${memcached.server3.weight}</value> <value>${memcached.server4.weight}</value> </list> </constructor-arg> <property name="commandFactory"> <bean class="net.rubyeye.xmemcached.command.TextCommandFactory" /> </property> <property name="sessionLocator"> <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator" /> </property> <property name="transcoder"> <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" /> </property> </bean> <!-- Use factory bean to build memcached client --> <bean id="memcachedClient" factory-bean="memcachedClientBuilder" factory-method="build" destroy-method="shutdown" /> </beans>
这里的memcachedClientBuilder节点完成MemcachedClientBuilder,然后通过memcachedClient节点配置factory-method,调用MemcachedClientBuilder的build()方法产生MemcachedClient,并配置destroy-method进行关闭。
不过我还是疑惑,这里的异常由谁来处理?Spring容器吗? 或者需要另一个代理Bean包装一下?
有了Spring容器支持,我们不需要在代码中进行配置,也不需要重复调用build()跟shutdown()方法,这些操作交给Spring来完成。
代码如下:
import static junit.framework.Assert.*; import java.util.concurrent.TimeoutException; import net.rubyeye.xmemcached.MemcachedClient; import net.rubyeye.xmemcached.exception.MemcachedException; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MemcachedSpringTest { private ApplicationContext app; private MemcachedClient memcachedClient; @Before public void init() { app = new ClassPathXmlApplicationContext("applicationContext.xml"); memcachedClient = (MemcachedClient) app.getBean("memcachedClient"); } @Test public void test() { try { // 设置/获取 memcachedClient.set("zlex", 36000, "set/get"); assertEquals("set/get", memcachedClient.get("zlex")); // 替换 memcachedClient.replace("zlex", 36000, "replace"); assertEquals("replace", memcachedClient.get("zlex")); // 移除 memcachedClient.delete("zlex"); assertNull(memcachedClient.get("zlex")); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MemcachedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关链接:
Memcached笔记——(一)安装&常规错误&监控
Memcached笔记——(二)XMemcached&Spring集成
Memcached笔记——(三)Memcached使用总结
Memcached笔记——(四)应对高并发攻击
XMemcached User Guide
发表评论
-
Thrift小记
2013-03-14 18:37 7879Thrit用的不多,也不够深入,这里小记一笔。 关于Th ... -
征服 Redis + Jedis + Spring (三)—— 列表操作
2013-03-06 16:16 84095一开始以为Spring下操 ... -
Nginx扩展(一):nginx_tcp_proxy_module
2013-01-15 16:41 20860好东西必须持续钻研,且持续积累,尤其要做个笔记。 今天是 ... -
Memcached笔记——(四)应对高并发攻击
2012-09-13 09:48 29065近半个月过得很痛苦,主要是产品上线后,引来无数机器用户恶意 ... -
征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)
2012-08-29 18:29 82412不得不说,用哈希操作来存对象,有点自讨苦吃! 不过,既然 ... -
征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
2012-08-29 16:30 157642有日子没写博客了,真的是忙得要疯掉。 完成项目基础架构搭建 ... -
Redis集群服务器-高可用调研随笔
2012-08-22 22:24 28950今天改了一天的Bug,本 ... -
Spring 注解学习手札(八)补遗——@ExceptionHandler
2012-08-17 18:35 84308Spring注解,改变了我的 ... -
征服 Mongodb 之 安装与系统服务配置
2012-08-16 18:47 13638今天补点旧账,去年搭建系统时,曾想用Mongodb做 ... -
征服 Redis + Jedis
2012-08-15 17:49 83559用Memcached,对于缓存对象大小有要求,单个对象不得 ... -
征服 Redis
2012-08-13 17:05 86388大约一年多前,公司同事开始使用Redis,不清楚是配置,还是 ... -
Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
2012-08-10 21:27 440230最近需要做些接口服务,服务协议定为JSON,为了整合在Spri ... -
Linux环境小问题——Get HostName Error
2012-08-06 12:55 7439之前使用mysql的时候,在配置文件中,已经指明了ip访问,但 ... -
征服 Kestrel + XMemcached + Spring TaskExecutor
2012-07-30 14:43 6268上一篇征服 Kestrel + XMemcached只是对Ke ... -
征服 Kestrel + XMemcached
2012-07-24 12:06 4737接上一篇 征服Kestrel,介绍XMemcached对于Ke ... -
征服 Kestrel
2012-07-23 18:33 13313因为要面对高并发PUSH需求,考虑将其按队列方式实现,最终选型 ... -
Memcached笔记——(三)Memcached使用总结
2012-07-04 17:06 44652为了将N个前端数据同步 ... -
征服 Nginx + Tomcat
2012-05-24 17:35 267982年前一直折腾Apache,现如今更习惯Nginx。 搭建网站 ... -
征服 Nginx
2012-04-25 13:12 10362赶上要配置测试服务器,赶上Nginx-1.2.0 stable ... -
iBatis整理——EhCache支持扩展
2012-04-10 17:11 7242项目完结,整理一些技术方面的相关收获。 已经记不得EhCac ...
相关推荐
`Simple-Spring-Memcached (SSM)` 是一个开源项目,它提供了将 `Memcached` 缓存系统与 `Spring` 框架无缝集成的解决方案。通过 `SSM`,开发者可以方便地在 `Spring` 应用程序中利用 `Memcached` 的高效缓存能力,...
memcached和spring集成、内附测试例子
标题中的“征服 Kestrel + XMemcached + Spring TaskExecutor”揭示了本次讨论的核心内容,涉及到三个关键的技术组件:Kestrel、XMemcached以及Spring的TaskExecutor。这些技术都是在构建高性能、可扩展的分布式系统...
在Spring框架中集成Memcached,主要是为了利用其高性能的分布式内存缓存特性来提升应用程序的性能。Xmemcached是Java实现的一个Memcached客户端,提供了丰富的功能和良好的性能。下面我们将深入探讨如何进行集成以及...
### Spring集成Memcached详解 #### 一、Memcached简介与客户端选择 Memcached是一种高性能、分布式内存对象缓存系统,用于减轻数据库负载、加速动态Web应用,并提高网站速度。Spring框架可以通过集成Memcached来...
当我们需要在Spring应用中集成Memcached时,"simple-spring-memcached"(SSM)是一个很好的选择。这篇博客(链接:https://younglibin.iteye.com/blog/2157666)将指导我们如何进行这个集成过程。 首先,我们要了解...
#### 二、simple-spring-memcached 3.0.2 集成Memcached和Spring **1. 修改Spring配置文件dispatcher-servlet.xml** 为了使Memcached与Spring框架集成,首先需要在Spring的配置文件`dispatcher-servlet.xml`中引入...
【Xmemcached/jedis Spring Demo】是一个整合了Xmemcached和jedis的Spring示例项目,旨在帮助开发者理解和学习如何在Spring框架中集成并使用这两种流行的NoSQL客户端库。Xmemcached是Java编写的高效、易用的...
Spring Memcached 是一个用于在Spring应用中集成Memcached缓存服务的框架。Memcached是一种分布式内存对象缓存系统,常用于提高网站数据读取的速度,因为它可以将数据存储在内存中,避免了频繁的数据库查询。现在...
本项目" Ehcache+xmemcached+redis 整合spring注解demo"旨在演示如何将这三种主流的缓存技术——Ehcache、xmemcached和Redis——与Spring框架的注解功能相结合,以实现高效、灵活的缓存管理。以下是对这些知识点的...
8. **易于集成**:Xmemcached与Spring框架有很好的兼容性,可以方便地与Spring的缓存抽象层集成,简化开发工作。 **Xmemcached版本1.3.3** 版本1.3.3是Xmemcached的一个稳定版本,可能包含了一些错误修复、性能...
标题中的“memcache也spring,hibernate的配置”指的是如何在Java开发环境中,结合Memcached缓存系统、Spring框架和Hibernate持久化框架进行集成配置。Memcached是一种高性能的分布式内存对象缓存系统,用于加速动态...
spring+xmemcached aop切面 需要xmemcached-1.2.5+spring-2.5.6 class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown"> ${XMemcached_servers} <!-- ...
在构建Web应用程序时,"Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】"是一个常见的技术栈,它涵盖了多个关键组件,为高效、灵活的开发提供了坚实的基础。以下是这个技术组合中...
安装php-memcached扩展 https://github.com/php-memcached-dev/php-memcached tar -zxvf php-memcached-3.1.3.tar.gz && cd /root/php-memcached-3.1.3 && /usr/local/php7/bin/phpize && ./configure --with-...
Spring Cache是Spring框架的一部分,它提供了一种抽象的缓存管理机制,可以方便地集成到各种缓存解决方案中,如Redis、EhCache以及我们的目标——memcached。下面我们将详细讨论这个整合过程中的关键知识点。 首先...
**Memcached与Spring集成安装部署指南** Memcached是一款高性能、分布式的内存对象缓存系统,常用于减轻数据库负载,提高Web应用性能。Spring框架则是一个广泛使用的Java企业级应用开发框架,提供了丰富的功能和...
【标题】"memcached-笔记资料"涉及到的核心知识点是分布式内存缓存系统——Memcached,它是一个高性能、轻量级的缓存解决方案,主要用于减轻数据库的负载,提高Web应用的性能。 【描述】"memcached-笔记资料"暗示了...
java Memcached客户端代码,整合到Spring,提供Util工具类 代码片段: public class MemcachedUtils { private static boolean setExp(String key, Object value, Date expire) { boolean flag = false; try { ...