`
m635674608
  • 浏览: 5091549 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

redis与spring的完全集成

 
阅读更多

下载spring-data-redis,gav如下:

  1.                 <dependency>  
  2.     <groupId>org.springframework.data</groupId>  
  3.     <artifactId>spring-data-redis</artifactId>  
  4.     <version>1.0.1.RELEASE</version>  
  5.     <exclusions>  
  6.         <exclusion>  
  7.             <groupId>org.slf4j</groupId>  
  8.             <artifactId>slf4j-log4j12</artifactId>  
  9.         </exclusion>  
  10.         <exclusion>  
  11.             <groupId>org.slf4j</groupId>  
  12.             <artifactId>jcl-over-slf4j</artifactId>  
  13.         </exclusion>  
  14.     </exclusions>  
  15.   
  16. </dependency>  


其中exclusion了两个包,原因是与项目里其它包冲突。

bean配置如下,可在web.xml里配置加载bean文件:

  1. <bean id="redisCacheManager" class="com.cr.common.cache.base.RedisCacheManger">  
  2.     <property name="pool" ref="shardedJedisPool"/>  
  3. </bean>  
  4. <!-- jedis 连接池配置-->  
  5. <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">    
  6.     <property name="maxActive"     value="${redis.pool.maxActive}" />    
  7.     <property name="maxIdle"       value="${redis.pool.maxIdle}" />    
  8.     <property name="maxWait"       value="${redis.pool.maxWait}" />    
  9.     <property name="testOnBorrow"  value="${redis.pool.testOnBorrow}" />    
  10. </bean>    
  11. <!-- jedis 多个服务器配置-->  
  12. <bean id="jedisShardInfo1" class="redis.clients.jedis.JedisShardInfo">    
  13.     <constructor-arg index="0" value="${redis2.ip}" />    
  14.     <constructor-arg index="1" value="${redis.port}" type="int" />    
  15. </bean>     
  16.   
  17. <bean id="jedisShardInfo2" class="redis.clients.jedis.JedisShardInfo">    
  18.     <constructor-arg index="0" value="${redis.ip}" />    
  19.     <constructor-arg index="1" value="${redis.port}" type="int" />    
  20. </bean>     
  21.   
  22. <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">    
  23.     <constructor-arg index="0" ref="jedisPoolConfig" />    
  24.     <constructor-arg index="1">  
  25.         <list>  
  26.             <ref bean="jedisShardInfo1" />  
  27.             <ref bean="jedisShardInfo2"/>  
  28.         </list>  
  29.     </constructor-arg>    
  30. </bean>  
  31.   
  32. <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"  
  33.     >  
  34.     <property name="hostName"   value="${redis.ip}" />    
  35.     <property name="port"       value="${redis.port}" />    
  36.     <property name="poolConfig" ref="jedisPoolConfig" />   
  37.   
  38.     <!--<property name="shardInfo"  ref="shardedJedisPool"></property>-->  
  39. </bean>   
  40.       
  41. <context:property-placeholder  location="/WEB-INF/spring/SystemContext.properties"/>   
  42. <context:component-scan base-package="org.springframework.data.redis.samples"/>  
  43.          

 

属性文件内容如下:

[plain] view plaincopyprint?
 
  1. redis.ip=192.168.1.110  
  2. redis2.ip=192.168.1.112  
  3. #Port     
  4. redis.port=6379  
  5.   
  6. #最大分配的对象数   
  7. redis.pool.maxActive=1024  
  8. #最大能够保持idel状态的对象数  
  9. redis.pool.maxIdle=200  
  10. #当池内没有返回对象时,最大等待时间  
  11. redis.pool.maxWait=1000  
  12. #当调用borrow Object方法时,是否进行有效性检查   
  13. redis.pool.testOnBorrow=true  
  14. #当调用return Object方法时,是否进行有效性检查     
  15. redis.pool.testOnReturn=true  


缓存管理接口:

  1. public interface RedisCache {  
  2.       
  3.     public <T> T getRedisCacheInfo(String key);  
  4.   
  5.     public <T> boolean setRedisCacheInfo(String key, T value);  
  6.       
  7. }  


缓存管理实现:

  1. public class RedisCacheManger implements RedisCache {  
  2.       
  3.     private ShardedJedisPool pool ;  
  4.       
  5.     private Logger log = Logger.getLogger(RedisCacheManger.class);   
  6.     public ShardedJedisPool getPool() {  
  7.         return pool;  
  8.     }  
  9.   
  10.     public void setPool(ShardedJedisPool pool) {  
  11.         this.pool = pool;  
  12.     }  
  13.   
  14.     public <T> T getRedisCacheInfo(String key) {  
  15.           
  16.         try {  
  17.             log.info("get from redisCache :"+key);  
  18.             System.out.println("get from rediscache");  
  19.             ShardedJedis jedis = pool.getResource();  
  20.             pool.returnResource(jedis);  
  21.             return (T)jedis.get(key);  
  22.         } catch (Exception e) {  
  23.             e.printStackTrace();  
  24.         }  
  25.         return null;  
  26.     }  
  27.    
  28.   
  29.     public <T> boolean setRedisCacheInfo(String key, T value) {  
  30.   
  31.         try {  
  32.             log.info("add to redisCache :"+key);  
  33.             System.out.println("add to rediscache");  
  34.             ShardedJedis jedis = pool.getResource();  
  35.             jedis.set(key, (String)value);  
  36.             pool.returnResource(jedis);  
  37.             return true;  
  38.         } catch (Exception e) {  
  39.             e.printStackTrace();  
  40.         }  
  41.         return false;  
  42.     }  
  43.     public static void main(String[] args) {  
  44.         new RedisCacheManger().setRedisCacheInfo("12345""asdfg");  
  45.     }  
  46. }  


缓存切面注解:

  1. @Retention(RetentionPolicy.RUNTIME)  
  2. @Target(ElementType.METHOD)  
  3. public @interface NeedRedisCached {}  


缓存切面处理类:

  1. @Aspect  
  2. public class RedisCacheAspect implements Ordered {  
  3.       
  4.     private static Logger log = Logger.getLogger(RedisCacheAspect.class);   
  5.     private RedisCache redisCacheManager;  
  6.     private int orderValue = 3;  
  7.     public RedisCache getRedisCacheManager() {  
  8.         return redisCacheManager;  
  9.     }  
  10.   
  11.     public void setRedisCacheManager(RedisCache redisCacheManager) {  
  12.         this.redisCacheManager = redisCacheManager;  
  13.     }  
  14.   
  15.     @Pointcut("@annotation(com.jd.bi.odp.common.cache.core.NeedRedisCached)")  
  16.     public void needRedisCached() {  
  17.   
  18.     }  
  19.       
  20.     @Around("needRedisCached() && args(filter,..)")  
  21.     public Object aroundInvoke(ProceedingJoinPoint pjp, QueryFilter filter) throws Throwable {  
  22.         log.info("enter aroundInvoke!!!");  
  23.         if (filter.getValue() == null) {  
  24.             return null;  
  25.         }  
  26.   
  27.         boolean cacheEnabled = CommonUtil.parseBoolean(HBaseConfig.getProperty("redisCache.enabled"), false);  
  28.   
  29.         if (cacheEnabled) {  
  30.               
  31.             String md5key = MD5Util.getMD5(filter.getValue().toString());  
  32.             Object value = redisCacheManager.getRedisCacheInfo(md5key);  
  33.             boolean flag = false;  
  34.             if (null != value) {  
  35.   
  36.                 JSONObject json = new JSONObject(value.toString());  
  37.                 return json;  
  38.             } else if ("null".equals(value)) {  
  39.                 return null;  
  40.             } else { //执行hbase查询  
  41.                 value = pjp.proceed();  
  42.                 if(null!=value){//此处根据业务逻辑判断不缓存的条件  
  43.                     }  
  44.                     else{  
  45.                         flag = redisCacheManager.setRedisCacheInfo(md5key, value.toString());  
  46.                           
  47.                         if(flag)  
  48.                             log.info("add a cache success by key: "+md5key);  
  49.                         else  
  50.                             log.warn("add a cache failure by key: "+md5key);  
  51.                     }  
  52.                 }  
  53.                 return value;  
  54.             }  
  55.         } else {// 执行hbase查询  
  56.             return pjp.proceed();  
  57.         }  
  58.     }  
  59.     @Override  
  60.     public int getOrder() {  
  61.         return orderValue;  
  62.     }  
  63.     public int getOrderValue() {  
  64.         return orderValue;  
  65.     }  
  66.   
  67.     public void setOrderValue(int orderValue) {  
  68.         this.orderValue = orderValue;  
  69.     }  
  70. }  


缓存存在直接返回,不存在的话执行数据源查询,此处是hbase查询,并设置缓存。

 

切面配置:

  1. <!-- redis缓存运行切面 -->  
  2. <bean id="RedisCacheAspect"  
  3.     class="com.cr.common.cache.core.RedisCacheAspect">  
  4.     <property name="orderValue" value="3" />  
  5.     <property name="redisCacheManager" ref="redisCacheManager"/>  
  6. </bean>  
  7. <!-- 切面申明配置-->  
  8. <aop:aspectj-autoproxy>  
  9.     <aop:include name="RedisCacheAspect" />  
  10. </aop:aspectj-autoproxy>  


此时,前端web页面用户的访问触发的action如果满足条件,则会进入切面方法处理,完成redis缓存的使用。

http://blog.csdn.net/cuirong1986/article/details/8213159?utm_source=tuicool&utm_medium=referral

分享到:
评论

相关推荐

    SpringCloud整合Redis

    SpringCloud整合Redis缓存;版本:SpringCloud :Dalston.SR4;SpringBoot:1.5.14.RELEASE;Redis:3.2.0;Maven :3.5.3.代码下载下来即可用

    Spring3.0整合redis相关jar

    Spring 3.0虽然相对较老,但在当时是广泛使用的版本,因此了解其与Redis的集成方式对维护旧项目或理解历史背景很有帮助。 首先,我们需要引入Redis的相关jar包。在"redis必须jar"中,通常包括以下组件: 1. `jedis....

    redis与springcache集成

    总的来说,集成Redis与Spring Cache可以简化缓存的管理和使用,通过合理配置和使用,能够有效地提升系统的响应速度和效率。在实际开发中,应根据业务需求调整缓存策略,例如设置合适的缓存过期时间,以及处理缓存和...

    Redis集成Spring的Java代码

    这样,我们便完成了Redis与Spring的集成,能够方便地使用Java代码对Redis进行各种操作。记住,合理利用Redis的特性(如批量操作、订阅发布等)可以显著提高应用的性能和响应速度。在实际项目中,根据业务需求进行...

    Redis与Spring集成

    将Redis与Spring集成,可以充分利用Redis的强大功能,同时利用Spring的便捷性。 集成Redis与Spring主要通过Spring Data Redis模块实现。Spring Data Redis提供了对Redis的高级抽象,包括模板类、Repository支持以及...

    redis和spring整合

    将Redis与Spring整合,可以充分利用Redis的高速存储优势,提升应用程序的性能。本文将深入探讨如何进行Redis与Spring的整合,并详细解析整合过程中的关键步骤。 首先,我们要理解Spring对数据源的支持。Spring提供...

    redis与spring整合

    我们将深入探讨如何在Spring框架中集成Redis,并通过注解方式实现数据的存取。 首先,Redis作为缓存系统,可以大大提高应用程序的响应速度,减少对数据库的直接访问,从而降低系统负载。在Spring中整合Redis,我们...

    redis集成spring jar包以及配置文件

    spring-data-redis-1.6.2.RELEASE.jar spring与redis集成包 commons-pool2-2.4.2.jar 与redis连接池 spring-data-commons-2.0.0.RC2.jar spring数据包 redis-context.xml redis和spring配置,需要引用到自己项目的...

    redis+spring jedis方式

    【Redis与Spring集成】 Redis,一个高性能的键值对存储系统,常被用作数据库、缓存和消息中间件。其高效性能得益于内存存储和基于键值的数据结构。Spring Data Redis是Spring框架的一个模块,目的是简化Redis在Java...

    spring集成redis,spring mvc实现session共享以及redis排行榜.zip

    spring集成redis,spring mvc实现session共享以及redis排行榜春季会议Redis这一系列项目,将会有多个spring相关的简单的例子,包括session-with-redis、spring整合redis等1、在springmvc项目session存储到redis中...

    springBoot集成redis

    在IT行业中,Spring Boot是一个非常流行的微服务框架,它简化了Spring应用的初始搭建...通过这样的集成,我们可以利用Spring Boot的便利性,结合Redis的高速缓存能力与MyBatis的数据库操作,构建出高效稳定的Web应用。

    redis-spring-boot-starter.rar

    `redis-spring-boot-starter`是Spring Boot生态中的一个启动器(Starter),它简化了Redis与Spring Boot集成的过程,使得开发者无需手动配置复杂的Redis连接参数,就能快速地在应用中启用Redis服务。这个启动器通常...

    shiro-redis集成的spring的web项目

    在这个项目中,Spring负责整体架构的管理,包括依赖注入、AOP(面向切面编程)以及与Shiro和Redis的集成。 **Shiro与Spring的集成** 将Shiro与Spring结合,可以利用Spring的IOC容器管理Shiro的组件,如Realm(领域...

    redis与spring的整合

    本文将详细介绍如何在Spring应用中集成Redis,以及如何操作String、list、set、map四种基本数据类型。 一、整合步骤 1. **环境配置**:首先确保本地安装了Redis服务器,并且能够在应用中访问。同时,添加Redis的...

    spring集成redis源码

    spring和redis集成有很多方式,看到网上很多都是使用redistemplate自己去做redis 的一些操作,但是对于我们开发来说,肯定是使用越方便越好,于是乎就有了spring的对redis或者memcahe这些换成框架的封装,只需要引入...

    SpringBoot集成Redis

    首先,集成SpringBoot与Redis的关键在于添加依赖。在`pom.xml`或`build.gradle`文件中,我们需要引入Spring Data Redis的依赖,这将提供对Redis操作的支持。例如,在Maven项目中,可以在`pom.xml`中添加以下代码: ...

    SpringMvc集成Redis项目完整示例

    在本项目中,"SpringMvc集成Redis项目完整示例" 提供了一个全面的教程,教你如何将Spring MVC框架与Redis缓存系统相结合。这个示例包括了Web应用程序的实例以及独立的Java测试案例,无需启动Web服务器即可进行测试。...

    Redis缓存+Spring的集成示例

    Redis缓存+Spring的集成示例 Redis缓存+Spring的集成示例Redis缓存+Spring的集成示例 Redis缓存+Spring的集成示例

    Spring-session2整合spring5+redis

    标题中的“Spring-session2整合spring5+redis”指的是在Spring框架的第五个主要版本(Spring 5)中,集成Spring Session 2与Redis数据库来管理Web应用的会话(Session)。Spring Session是一个开源项目,旨在提供一...

    Spring+Struts2+hibernate+Redis整合

    通过Action类和拦截器,可以实现与Spring的无缝集成,同时也可以利用Spring的缓存功能,将频繁访问的数据存储在Redis中。 3. **Hibernate框架**:Hibernate是Java领域的一个对象关系映射(ORM)框架,它简化了数据库...

Global site tag (gtag.js) - Google Analytics