一、序言
有了缓存,还是喜欢用注解去使用,本想和spring 写一个类似ehcache 的东西,后来发google 已经提供了spring 和memcache 的 注解配置,那就先拿来用用了~。~。
二、基本配置:
2.1 先把spring 和 memcached 结合起来,创建一个spring-xmemcached.xml 的文件
<!-- 用这个代替xmemcacheClient去构建client --> <bean id="xmemcacheBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder"> <!-- 暂时我们就用两个端口 --> <constructor-arg> <list> <bean class="java.net.InetSocketAddress"> <constructor-arg> <value>localhost</value> </constructor-arg> <constructor-arg> <value>11211</value> </constructor-arg> </bean> <bean class="java.net.InetSocketAddress"> <constructor-arg> <value>localhost</value> </constructor-arg> <constructor-arg> <value>11212</value> </constructor-arg> </bean> </list> </constructor-arg> <!-- 权重配置 --> <constructor-arg> <list> <value>1</value> <value>2</value> </list> </constructor-arg> <!--</property>--> <!-- nio 连接池 配置,默认是 1 --> <property name="connectionPoolSize" value="2"/> <!-- 二进制协议 ,默认是 TextCommandFactory--> <property name="commandFactory"> <bean class="net.rubyeye.xmemcached.command.BinaryCommandFactory"/> </property> <!--分布式策略 一致性hash,默认是 ArrayMemcachedSessionLocator --> <property name="sessionLocator"> <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"/> </property> <!--序列化转换器,默认就是这个 --> <!--<property name="transcoder" value="net.rubyeye.xmemcached.transcoders.SerializingTranscoder"/>--> <!--字节缓冲器,不知道为啥这玩意儿过时了,源码默认采用的这个!! --> <!--<property name="bufferAllocator" value="net.rubyeye.xmemcached.buffer.SimpleBufferAllocator"/>--> </bean> <!-- 配置一个客户端 --> <bean name="xmemcachedClient" factory-bean="xmemcacheBuilder" factory-method="build" destroy-method="shutdown"/>
测试一下:可以操作就表示 基本配置成功了
ApplicationContext context = new ClassPathXmlApplicationContext("spring/spring-xmemcached.xml"); MemcachedClient client = (MemcachedClient) context.getBean("xmemcachedClient"); System.out.println(client); client.add("name",100,"张三"); System.out.println(client.get("name")); client.delete("name"); System.out.println(client.get("name"));
还是可以参考 https://code.google.com/p/xmemcached/wiki/User_Guide_zh
三、spring+memcached 注解的试用
3.1 引入依赖:
<dependency> <groupId> com.google.code.simple-spring-memcached </groupId> <artifactId> xmemcached-provider </artifactId> <version>3.5.0</version> </dependency>
3.2 基本配置:
<!-- 轻轻的扫描一下 --> <context:component-scan base-package="com.raycloud.plugin.memcache"/> <!-- AOP 你懂的 --> <aop:aspectj-autoproxy /> <!-- simple-spring-memcached 目录下的 --> <import resource="classpath:simplesm-context.xml" /> <!-- 默认一个client --> <bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory"> <property name="cacheClientFactory"> <bean name="cacheClientFactory" class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" /> </property> <property name="addressProvider"> <bean class="com.google.code.ssm.config.DefaultAddressProvider"> <property name="address" value="127.0.0.1:11211,127.0.0.1:11212" /> </bean> </property> <!-- 一致性hash ~。~ --> <property name="configuration"> <bean class="com.google.code.ssm.providers.CacheConfiguration"> <property name="consistentHashing" value="true" /> </bean> </property> </bean> <!-- 这玩意儿在3.2 后,文档可以指定顺序 以及 拦截器 前后执行 - -!暂时没用过,加上不报错 --> <bean class="com.google.code.ssm.Settings"> <property name="order" value="500" /> </bean>
3.3 测试一下:我们建立TestDao 和 Test 类,记得在扫描的package 下哦!
import com.google.code.ssm.api.ParameterValueKeyProvider; import com.google.code.ssm.api.ReadThroughSingleCache; import org.springframework.stereotype.Component; /** * Created by qiqiang on 2014/12/22. */ @Component public class TestDao { @ReadThroughSingleCache(namespace = "test", expiration = 30000) public long getUserById(@ParameterValueKeyProvider long id) throws Exception{ System.out.println("没有缓存命中"); return id; } }
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:spring/spring-xmemcached.xml") public class Test { @Autowired private TestDao testDao; @org.junit.Test public void x(){ try { System.out.println( testDao.getUserById(2l)+"------------------------"); }catch (Exception e){ e.printStackTrace(); } } }
忘记了,还得加测试的依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.2.4.RELEASE</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
3.4 OK 就测试完成了,当然你也可以用spring 定义的缓存接口,和 ehcache 类似的啦,看配置:
为了配套依赖:
<dependency> <groupId> com.google.code.simple-spring-memcached </groupId> <artifactId>spring-cache</artifactId> <version>3.5.0</version> </dependency>
<cache:annotation-driven /> <!-- 这里的cacheManager 缓存名字是默认的,要改,就参考我spring+ehcache 的配置改 --> <bean name="cacheManager" class="com.google.code.ssm.spring.SSMCacheManager"> <property name="caches"> <set> <bean class="com.google.code.ssm.spring.SSMCache"> <constructor-arg name="cache" index="0" ref="defaultCache" /> <!-- 默认 5 minutes --> <constructor-arg name="expiration" index="1" value="300" /> <!-- @CacheEvict(..., "allEntries" = true) won't work because allowClear is false, so we won't flush accidentally all entries from memcached instance --> <!-- 这里表示我们不会全部清除所有缓存,使用ehcache 的时候我们就会发现, @CacheEvict(..., "allEntries" = true) 它是按 配置的缓存名 就行清除的,而memcached 我们是通过namespace 进行清除的,还有指定时间,这是我最喜欢的了~。~ --> <constructor-arg name="allowClear" index="2" value="false" /> </bean> </set> </property> </bean> <bean name="defaultCache" class="com.google.code.ssm.CacheFactory"> <property name="cacheName" value="defaultCache"/> <property name="cacheClientFactory"> <bean name="cacheClientFactory" class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl"/> </property> <property name="addressProvider"> <bean class="com.google.code.ssm.config.DefaultAddressProvider"> <property name="address" value="127.0.0.1:11211,127.0.0.1:11212"/> </bean> </property> <property name="configuration"> <bean class="com.google.code.ssm.providers.CacheConfiguration"> <property name="consistentHashing" value="true"/> </bean> </property> </bean>
3.5 现在来看看 这种方式得测试,应该比较熟悉~。~!
TestDao2 和上面液氧,就改了下名字
@Component public class TestDao2 { @CachePut(value = "defaultCache",key="#id") public long getUserById(long id) throws Exception{ System.out.println("没有缓存命中"); return id; } @Cacheable(value = "defaultCache") public String getList(String author) throws Exception { System.out.println("没有缓存命中"); return author; } }
Test,和上面一样
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:spring/spring-xmemcached.xml") public class Test { @Autowired private TestDao2 testDao2; @org.junit.Test public void x(){ try { System.out.println( testDao2.getUserById(2l)+"------------------------"); }catch (Exception e){ e.printStackTrace(); } } }
同样可以实现缓存
小结:
1.这里介绍了spring +xmemcached 配置,以及注解的配置,关于注解的一些详细资料下次介绍
2.由于有namespace 和 时间的控制,使用起来非常方便,集群部署,容错 都比较舒服的~。~,有错误请指出!
3.上面的来源 大部分还是文档介绍,当翻译下而已,更多的大家可以参考下面资料!
源码
https://github.com/ragnor/simple-spring-memcached
文档
https://code.google.com/p/simple-spring-memcached/wiki/Getting_Started
https://code.google.com/p/simple-spring-memcached/wiki/UserGuide
https://code.google.com/p/xmemcached/wiki/User_Guide_zh
别人的例子
http://weblog4j.com/2013/05/31/simple-spring-memcached-spring-caching-abstraction-and-memcached/
相关推荐
Simple-Spring-Memcached(SSM)是将Memcached缓存系统与Spring框架紧密结合的一个优秀项目,它提供了一种优雅的方式来实现基于注解的缓存管理,极大地简化了Java开发者在Spring应用中使用Memcached的过程。...
当我们需要在Spring应用中集成Memcached时,"simple-spring-memcached"(SSM)是一个很好的选择。这篇博客(链接:https://younglibin.iteye.com/blog/2157666)将指导我们如何进行这个集成过程。 首先,我们要了解...
在JAVA中使用Memcached进行行缓存是比较复杂的。Simple-Spring-Memcachd(SSM)企图通过实现几个基础的使用项...使用Simple-Spring-Memcached只需要简单的配置和在要缓存的方法的返回值或参数上标注上相应的注解就可以。
`Simple-Spring-Memcached (SSM)` 是一个开源项目,它提供了将 `Memcached` 缓存系统与 `Spring` 框架无缝集成的解决方案。通过 `SSM`,开发者可以方便地在 `Spring` 应用程序中利用 `Memcached` 的高效缓存能力,...
《Simple-Spring-Memcached统一缓存的使用详解》 在Java应用中,尤其是在中大型项目中,有效地管理和使用缓存对于提升系统性能至关重要。Simple-Spring-Memcached(SSM)是一个流行的缓存框架,它整合了Spring框架...
通过Spring的AOP(面向切面编程)特性,SSM(Simple Spring Memcached)提供了简洁的API和配置,让开发者能够轻松地在Spring应用中实现缓存功能。 SSM的主要特点包括: 1. **无缝集成**:SSM通过Spring的Bean管理...
为了使Memcached与Spring框架集成,首先需要在Spring的配置文件`dispatcher-servlet.xml`中引入simple-spring-memcached的相关配置。具体来说,需要添加以下内容: ```xml <import resource="classpath:simplesm-...
2. **配置Memcached服务器**:在Spring的配置文件(如applicationContext.xml)中,定义Memcached服务器的连接信息。例如: ```xml <bean id="memcachedClient" class=...
2. **配置Memcached**:在Spring的配置文件中,我们需要声明一个`MemcachedClient` bean,指定服务器地址和连接池配置。例如: ```xml <bean id="memcachedClient" class=...
- 引入SSM配置:`<import resource="classpath:simplesm-context.xml">`引入Simple Spring Memcached(SSM)的核心配置,这是一个基于AOP的Memcached客户端,用于处理缓存操作。 5. **缓存注解**: - 使用`@...
对于Spring框架中的配置,我们需要在Spring的配置文件中声明一个Bean,该Bean使用`MemcachedFactoryBean`来创建Memcached客户端实例。配置文件可能如下所示: ```xml <bean id="memcachedClient" class=...
5. **扩展功能**:文章还提到,可以借鉴这种思路,通过注解实现方法返回结果的缓存,类似`com.google.code.simple-spring-memcached`中的`@ReadThroughSingleCache`。 【总结】 通过Spring的AOP(面向切面编程)和...
在 Spring Boot 应用启动时,我们可以通过 Autowired 注解注入 EVCacheClient 实例,然后在业务逻辑中调用这些方法来使用缓存服务。 ```java @Service public class MyService { @Autowired private ...
Dubbo 提供了多种配置方式,包括 Xml、属性文件、注解和 API 配置。以下是一些具体的配置项: - **启动时检查**:在服务启动前进行检查,以确保运行环境正确。 - **集群容错**:容错策略,如 Failover Cluster、Fail...
Simple Logging Facade for Java (SLF4J) 是一个用于多种日志框架的简单抽象层。 #### 单元测试 - **JUnit**: 工具。JUnit 是一个Java编程语言的单元测试框架,由Ernst & Kent Beck编写。 - **JMockit**: 工具。...
Spring框架是Java中最常用的DI实现,通过XML配置或注解方式管理对象及其依赖关系,提升代码的灵活性和可测试性。 3. **数据访问**:在Java中,数据访问通常涉及JDBC(Java Database Connectivity)和ORM(Object-...
其中,配置部分讲解了如何进行Xml配置、属性配置、注解配置和API配置,帮助开发者快速上手并根据需求灵活定制服务。同时,提供了一系列示例来加深理解和应用。 在服务的成熟度方面,文档描述了功能成熟度和策略成熟...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...