Memcached Java Client Spring整合
如果你的项目是使用Spring作为中间件的,那么Spring的整合配置是很有用的。
配置文件
applicationContext-memcachedjavaclient.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd ">
<!--memcached 客户端 SocketPool-->
<bean id="memcachedPool" class="com.danga.MemCached.SockIOPool" factory-method="getInstance" init-method="initialize" destroy-method="shutDown">
<constructor-arg><value>neeaMemcachedPool</value></constructor-arg>
<property name="servers">
<list>
<value>localhost:11211</value>
<value>localhost:11212</value>
<value>localhost:11213</value>
</list>
</property>
<!--多服务器负载均衡
<property name="weights">
<value>1,1,1</value>
</property>-->
<property name="initConn">
<value>5</value>
</property>
<property name="minConn">
<value>5</value>
</property>
<property name="maxConn">
<value>250</value>
</property>
<property name="maintSleep">
<value>30</value>
</property>
<property name="nagle">
<value>false</value>
</property>
<property name="maxIdle">
<value>6000</value>
</property>
<property name="socketTO">
<value>3000</value>
</property>
</bean>
<!--memcached client-->
<bean id="memCachedClient" class="com.danga.MemCached.MemCachedClient">
<constructor-arg>
<value>neeaMemcachedPool</value>
</constructor-arg>
</bean>
<!--memcached 客户端***end-->
<!-- 业务系统缓存服务 -->
<bean id="memcachedClientService" class="org.acooly.memcached.memcachedjavaclient.MemcachedClientServiceJavaClientImpl">
<property name="memCachedClient" ref="memCachedClient" />
</bean>
</beans>
业务代码
对原来直接使用JVM容器的代码进行微调,服务方法中修改调用单例获取memcached客户端实例为依赖Spring注入。
服务接口类:MemcachedClientService
/**
* Memcached 常用功能接口定义,用于业务层直接使用,屏蔽各种客户端实现的API差异,实现解耦客户端与业务系统的目的
* 无过期时间和flags支持,无append,prepend,replace,incr,decr等操作
*
* @author zhangpu
*
*/
public interface MemcachedClientService {
String get(String key);
CacheItem gets(String key);
boolean add(String key, String value);
boolean set(String key, String value);
boolean cas(String key, String value, long unique);
boolean delete(String key);
boolean flushAll();
}
服务实现类:MemcachedClientServiceJavaClientImpl
/**
* Memcached for java 客户端缓存服务实现 (SPING)
*
* @author zhangpu
*
*/
public class MemcachedClientServiceJavaClientImpl implements MemcachedClientService {
/** 客户端实现注入 */
private MemCachedClient memCachedClient;
public void setMemCachedClient(MemCachedClient memCachedClient) {
this.memCachedClient = memCachedClient;
}
public boolean add(String key, String value) {
return memCachedClient.add(key, value);
}
public boolean cas(String key, String value, long unique) {
return memCachedClient.cas(key, value, unique);
}
public String get(String key) {
return (String) memCachedClient.get(key);
}
public CacheItem gets(String key) {
MemcachedItem item = memCachedClient.gets(key);
return new CacheItem(key, (String) item.getValue(), item.getCasUnique());
}
public boolean set(String key, String value) {
return memCachedClient.set(key, value);
}
public boolean delete(String key) {
return memCachedClient.delete(key);
}
public boolean flushAll() {
return memCachedClient.flushAll();
}
}
代码验证
public class MemcachedClientSerivceSpringTest {
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext-memcachedjavaclient.xml" });
MemcachedClientService memcachedClientService = (MemcachedClientService) context
.getBean("memcachedClientService");
String key = "keySpring";
String value = "i like Spring.";
String newValue = "i love Spring";
System.out.println("add: " + memcachedClientService.add(key, value));
System.out.println("set: " + memcachedClientService.set(key, newValue));
System.out.println("get: " + memcachedClientService.get(key));
CacheItem item = memcachedClientService.gets(key);
System.out.println("gets: " + item);
System.out.println("cas: " + memcachedClientService.cas(key, newValue, item.getUnique()));
System.out.println("del: " + memcachedClientService.delete(key));
}
}
执行结果:
add: true
set: true
get: i love Spring
gets: {key:keySpring,value:i love Spring,unique:2701285}
cas: true
del: true
配置问题
配置文件中,我注释了权重配置,是因为SocketPool中的权重参数是Integer[],我没有想到办法怎么在Spring配置中注入Integer[]参数,以前都是自己的代码,可以转换为字符串跳过此问题了。
<property name="weights">
<value>1,1,1</value>
</property>
解决办法:
- 扩展Spring的配置实现,Spring提供了相关扩展方法,支持自定义参数配置。
- 下载memcached java client的源代码,修改下SocketPool的实现。
分享到:
相关推荐
NULL 博文链接:https://acooly.iteye.com/blog/1120347
java-memcached-2.6.6.jar
memcache客户端jar包: 1,java_memcached-release_2.6.6.jar 2,commons-pool-1.5.6.jar 3,slf4j-api-1.6.1.jar 4,slf4j-simple-1.6.1.jar
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
ssm3-mybatis2-memcached 使用了 simple-...ssm3-springcache-mybatis3-memcached 通过 Spring Cache(Spring 3.1+) 实现 simple-spring-memcached 和 MyBatis3 整合。 simple-spring-memcached 使用了 JSON 序列化。
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
该项在java-memcached客户端的基础上使用java5的注解和Sping/AspectJ的AOP,使能够在Sping中管理bean缓存。使用Simple-Spring-Memcached只需要简单的配置和在要缓存的方法的返回值或参数上标注上相应的注解就可以。
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3.xmemcached,XMemcached也使用得比较广泛,而且有较详细的中文API文档,具有如下特点:高性 能、支持完整的协议、支持客户端分布、允许设置节点权重、动态增删节点、支持JMX、与Spring框架和Hibernate-memcached的...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...
3. Spring框架: - Spring Boot - Spring MVC - Spring Data - Spring Security - Spring Cloud 4. Web开发: - HTML、CSS、JavaScript - HTTP协议 - Servlet、JSP - AJAX、JSON、XML 5. 框架和工具...