欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

配置Spring4.0注解Cache+Redis缓存的用法

程序员文章站 2024-02-28 08:59:22
前言: 目前公司项目在上一个技术架构的处理,已经搭建好了redis,但redis只用在了做session的管理,然而 后台的对象缓存没有用上 1. redis 和...

前言:

目前公司项目在上一个技术架构的处理,已经搭建好了redis,但redis只用在了做session的管理,然而 后台的对象缓存没有用上

1. redis 和 ehcache的区别:

简单了解了下,个人觉得 从部署上而言,redis更适合分布式部署,ehcache是在每台应用服务器上开辟一块内存做缓存,集群时还得考虑缓存的情况, redis就不需要考虑缓存了、单独部署在一台服务器中(也可以是在某一台应用服务器中)

2. 项目配置(spring mvc+maven+mybaits+redis),这里只讲spring 集成 redis:

a. 配置 pom.xml 文件  (若不是maven管理项目,下载2个jar 即可 )

<!-- redis cache related.....start --> 
    <dependency> 
      <groupid>org.springframework.data</groupid> 
      <artifactid>spring-data-redis</artifactid> 
      <version>1.6.0.release</version> 
    </dependency> 
    <dependency> 
      <groupid>redis.clients</groupid> 
      <artifactid>jedis</artifactid> 
      <version>2.7.3</version> 
    </dependency> 
    <!-- redis cache related.....end --> 

b.配置 applicationcontext.xml文件

先在<beans>中加入 cache缓存

xmlns:cache="http://www.springframework.org/schema/cache" 
 
xsi:schemalocation="http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.2.xsd" 

在spring加载redis配置

<!-- ******************** redis缓存  **********************--> 
<!-- 注解一定要配置,不然不起作用 --> 
<cache:annotation-driven /> 
 
 
<!-- jedis 配置 --> 
  <bean id="poolconfig" class="redis.clients.jedis.jedispoolconfig"> 
    <property name="maxidle" value="${redis.maxidle}" /> 
    <!--<property name="maxwaitmillis" value="${redis.maxwait}" />--> 
    <property name="testonborrow" value="${redis.testonborrow}" /> 
  </bean> 
 
  <!-- redis服务器中心 --> 
  <bean id="connectionfactory" 
    class="org.springframework.data.redis.connection.jedis.jedisconnectionfactory"> 
    <property name="poolconfig" ref="poolconfig" /> 
    <property name="port" value="${redis.port}" /> 
    <property name="hostname" value="${redis.hostname}" /> 
    <!-- <property name="password" value="${redis.password}" /> --> 
    <property name="timeout" value="${redis.timeout}"></property> 
  </bean> 
   
  <bean id="redistemplate" class="org.springframework.data.redis.core.redistemplate"> 
    <property name="connectionfactory" ref="connectionfactory" /> 
    <property name="keyserializer"> 
      <bean 
        class="org.springframework.data.redis.serializer.stringredisserializer" /> 
    </property> 
    <property name="valueserializer"> 
      <bean 
        class="org.springframework.data.redis.serializer.jdkserializationredisserializer" /> 
    </property> 
  </bean> 
  <!-- 配置缓存 --> 
  <bean id="cachemanager" class="org.springframework.data.redis.cache.rediscachemanager"> 
    <constructor-arg ref="redistemplate" /> 
  </bean> 
   
<!-- ******************** redis缓存  **********************--> 

c.配置 application.properties 资源文件

#redis config 
#redis.hostname=192.168.242.131  
redis.hostname=localhost 
redis.port=6379  
redis.timeout=2000 
redis.usepool=true 
redis.default.db=0 
#\u6700\u5927\u5206\u914d\u7684\u5bf9\u8c61\u6570   
redis.maxtotal=600 
#\u6700\u5927\u80fd\u591f\u4fdd\u6301idel\u72b6\u6001\u7684\u5bf9\u8c61\u6570  
redis.maxidle=300  
#\u591a\u957f\u65f6\u95f4\u68c0\u67e5\u4e00\u6b21\u8fde\u63a5\u6c60\u4e2d\u7a7a\u95f2\u7684\u8fde\u63a5 
redis.timebetweenevictionrunsmillis=30000  
#\u7a7a\u95f2\u8fde\u63a5\u591a\u957f\u65f6\u95f4\u540e\u4f1a\u88ab\u6536\u56de 
redis.minevictableidletimemillis=30000  
#\u5f53\u8c03\u7528borrow object\u65b9\u6cd5\u65f6\uff0c\u662f\u5426\u8fdb\u884c\u6709\u6548\u6027\u68c0\u67e5  
redis.testonborrow=true  
########reids\u7f16\u7801\u683c\u5f0f 
redis.encode=utf-8 
######\u7f13\u5b58\u8fc7\u671f\u65f6\u95f4 \u79d2 1000*60*60*24*7 \u4e03\u5929 
redis.expire=604800000 
####\u662f\u5426\u5f00\u542fredis\u670d\u52a1\u5e94\u7528 
redis.unlock=false 

3. 测试  

@service("testservice") 
public class testserviceimpl implements itestservice { 
   
  @resource 
  private itestdao testdao; 
 
  @cacheable(value="testid",key="'id_'+#id") 
  public test gettestbyid(int id) { 
    return this.testdao.getobjbyid(id); 
  } 
   
  @cacheevict(value="testid",key="'id_'+#id") 
  public void removetestbyid(int id) { 
     
  } 
} 

结果:

第一次 进入service方法

第二次 不进入service方法 也得到了值

注: 有朋友会问,启动访问时保错, 那是因为本地未启动redis服务, 下载win32/win64版的,启动 再访问就不会报错

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。