详解Spring极速集成注脚redis实录,极速集成申明

详解Spring极速集成注脚redis实录,极速集成申明

末段去测验一下就能够。

1. 抬高项目依赖

        <!--redis 缓存-->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.8.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

Spring Data Redis 为 Spring 团队对 Jedis 举办了打包,集成 Jedis
的有个别命令和方法。

org.springframework.bootspring-boot-starter-cacheorg.springframework.bootspring-boot-starter-redis1.4.3.RELEASE

   本文重视描述集成进度,能令你火速的通过
spring-data-redis 将 redis 集成到 spring
项目中,毕竟大家都忙的。

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
  protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);

  private volatile JedisConnectionFactory mJedisConnectionFactory;
  private volatile RedisTemplate<String, String> mRedisTemplate;
  private volatile RedisCacheManager mRedisCacheManager;

  public RedisCacheConfig() {
    super();
  }

  public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate<String, String> mRedisTemplate, RedisCacheManager mRedisCacheManager) {
    super();
    this.mJedisConnectionFactory = mJedisConnectionFactory;
    this.mRedisTemplate = mRedisTemplate;
    this.mRedisCacheManager = mRedisCacheManager;
  }

  public JedisConnectionFactory redisConnectionFactory() {
    return mJedisConnectionFactory;
  }

  public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
    return mRedisTemplate;
  }

  public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
    return mRedisCacheManager;
  }

  @Bean
  public KeyGenerator keyGenerator() {
    return new KeyGenerator() {
      @Override
      public Object generate(Object o, Method method, Object... objects) {
        StringBuilder sb = new StringBuilder();
        sb.append(o.getClass().getName());
        sb.append(method.getName());
        for (Object obj : objects) {
          sb.append(obj.toString());
        }
        return sb.toString();
      }
    };
  }
}

利用springBoot增加redis缓存需求在POM文件里引进

   Redis 做为基于内部存款和储蓄器的 Key-Value
数据库,用来做缓存服务器性能价格比一对一高。

#============================#
#==== Redis settings ====#
#============================#
#redis 服务器 IP
redis.host=127.0.0.1

#redis 服务器端口
redis.port=6379

#redis 密码
redis.pass=redis#2017

#redis 支持16个数据库(相当于不同用户)可以使不同的应用程序数据彼此分开同时又存储在相同的实例上
redis.dbIndex=0

#redis 缓存数据过期时间单位秒
redis.expiration=3000

#控制一个 pool 最多有多少个状态为 idle 的jedis实例
redis.maxIdle=300

#控制一个 pool 可分配多少个jedis实例
redis.maxActive=600

#当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
redis.maxWait=1000

#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true

#redisspring.redis.cluster.nodes=172.0.0.1:6379spring.redis.pool.max-active=20spring.redis.pool.max-idle=10spring.redis.pool.min-idle=5spring.redis.pool.max-wait=10spring.redis.timeout=5000

4. 编辑自定义 redis 配置类

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
    protected final static Logger log = LoggerFactory.getLogger(RedisCacheConfig.class);

    private volatile JedisConnectionFactory mJedisConnectionFactory;
    private volatile RedisTemplate<String, String> mRedisTemplate;
    private volatile RedisCacheManager mRedisCacheManager;

    public RedisCacheConfig() {
        super();
    }

    public RedisCacheConfig(JedisConnectionFactory mJedisConnectionFactory, RedisTemplate<String, String> mRedisTemplate, RedisCacheManager mRedisCacheManager) {
        super();
        this.mJedisConnectionFactory = mJedisConnectionFactory;
        this.mRedisTemplate = mRedisTemplate;
        this.mRedisCacheManager = mRedisCacheManager;
    }

    public JedisConnectionFactory redisConnectionFactory() {
        return mJedisConnectionFactory;
    }

    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
        return mRedisTemplate;
    }

    public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
        return mRedisCacheManager;
    }

    @Bean
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object o, Method method, Object... objects) {
                StringBuilder sb = new StringBuilder();
                sb.append(o.getClass().getName());
                sb.append(method.getName());
                for (Object obj : objects) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }
}

 
 该配置类传承自 org.springframework.cache.annotation.CachingConfigurerSupport
并促成 org.springframework.cache.annotation.CachingConfigurer
的办法。

   通俗一点,该类告诉 spring
当前采取的缓存服务为 redis 并自定义了缓存 key 生成的条条框框。

当系统 redis 碰着标题出现故障时,通晓这里的选料是个不错的挑选。

图片 1

5. 在您欣赏的地点实行讲授缓存

图片 2

 
 缓存一般采纳在服务层,在您想缓存的措施方面加多相应的注释就能够,上边八个缓存的讲解你得明白。

   @Cacheable  spring
会在其被调用后将重临值缓存起来,以保障后一次利用同一的参数来进行该情势时方可平昔从缓存中拿走结果,而不须求再一次实行该办法。

   @CachePut
 标记的不二等秘书籍在实行前不会去检查缓存中是还是不是存在之前实践过的结果,而是每一次都会实践该方法,并将试行结果以键值对的款式存入钦点的缓存中。

   @CacheEvict
用来标记在急需破除缓存成分的措施或类上的。

 
 当然这一个注脚里面还可能有好些个别样的天性配置,协作 spring-el
表明式能做的事情还会有相当多,差非常少唯有你不意,未有做不到。

   在专门的学问法规相比复杂的景况下,缓存 key
的统一筹算相当的重大,设计能够能够令你的行使飞起来。

   整个集成专业就得了了,是还是不是很简短,上述算是 redis
的冰山一角,还会有众多像 redis 路由/布满式/集群….,有机缘实施稳步体会。

 

该配置类承袭自
org.springframework.cache.annotation.CachingConfigurerSupport 并达成org.springframework.cache.annotation.CachingConfigurer 的措施。

1、简易方法

   官方推出的面向 Java 的 Client
Jedis,提供了过多接口和方法,能够让 Java 操作使用 Redis。

详解Spring极速集成注脚redis实录,极速集成申明。本来配置文件你也得以硬编码到程序中,只是在参数爆发转移的时候可比难过一点而已。

如上只供给丰盛二个申明就足以
在调用查询的时候先去缓存里面找,未有就推市场价格势 然后再存到缓存里面

3. 添加 redis.properties

#============================#
#==== Redis settings ====#
#============================#
#redis 服务器 IP
redis.host=127.0.0.1

#redis 服务器端口
redis.port=6379

#redis 密码
redis.pass=redis#2017

#redis 支持16个数据库(相当于不同用户)可以使不同的应用程序数据彼此分开同时又存储在相同的实例上
redis.dbIndex=0

#redis 缓存数据过期时间单位秒
redis.expiration=3000

#控制一个 pool 最多有多少个状态为 idle 的jedis实例
redis.maxIdle=300

#控制一个 pool 可分配多少个jedis实例
redis.maxActive=600

#当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
redis.maxWait=1000

#在borrow一个jedis实例时,是否提前进行alidate操作;如果为true,则得到的jedis实例均是可用的;
redis.testOnBorrow=true

 
 当然配置文件你也可以硬编码到程序中,只是在参数发生变动的时候相比痛楚一点而已。

   个中绝大许多安插项都是围绕着 jedisPool
,假如您对数据库连接池比较熟,你会发觉它俩的配备项有一点相似。

   当系统 redis
境遇难点应际而生故障时,通晓这里的选取是个不错的抉择,越来越多安插项详解。

提供连接管理,类别化等作用,它对 Redis
的交互举行了更加高档案的次序的虚幻,一点都不小的有益和简化了 Redis 的操作。

在对应的章程上投入注解 那样就能删除缓存

2. 添加 spring-redis-context 配置

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd">
    <description>redis 相关类 Spring 托管</description>

    <!--载入 redis 配置文件-->
    <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>

    <!-- 配置 JedisPoolConfig 实例 -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}"/>
        <property name="maxTotal" value="${redis.maxActive}"/>
        <property name="maxWaitMillis" value="${redis.maxWait}"/>
        <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
    </bean>

    <!-- 配置JedisConnectionFactory -->
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="${redis.host}"/>
        <property name="port" value="${redis.port}"/>
        <property name="password" value="${redis.pass}"/>
        <property name="database" value="${redis.dbIndex}"/>
        <property name="poolConfig" ref="poolConfig"/>
    </bean>

    <!-- 配置RedisTemplate -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory"/>
    </bean>

    <!-- 配置RedisCacheManager -->
    <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
        <constructor-arg name="redisOperations" ref="redisTemplate"/>
        <property name="defaultExpiration" value="${redis.expiration}"/>
    </bean>

    <!-- 配置RedisCacheConfig -->
    <bean id="redisCacheConfig" class="com.rambo.sdh.common.util.RedisCacheConfig">
        <constructor-arg ref="jedisConnectionFactory"/>
        <constructor-arg ref="redisTemplate"/>
        <constructor-arg ref="redisCacheManager"/>
    </bean>
</beans>

  JedisConnectionFactory 为
Jedis 连接工厂,配置由独立抽象的 JedisPoolConfig 提供。

   若是你纯熟 Spring 的 JdbcTemplate
对象的话,这里大致能猜出来 RedisTemplate 的职能,RedisTemplate 对 RedisConnection 举办了包装。

   提供连接管理,连串化等作用,它对 Redis
的交互举行了更加高档次的悬空,不小的有益和简化了 Redis 的操作。

   RedisCacheManager
做为 redis 统一的调治和理事,有意思味可以反编写翻译源码看看。

   继承自 org.springframework.cache.transaction.AbstractTransactionSupportingCacheManager
并实现 org.springframework.cache.CacheManager。

继承自
org.springframework.cache.transaction.AbstractTransactionSupportingCacheManager
并实现 org.springframework.cache.CacheManager。

依据加多成就后,须求配置大家地方的redis数据库连接到品种中,大家展开application-local.properties配置文件增添如下图8所示的配置内容:

   Spring 共青团和少先队对 Jedis 实行了打包,独立为
spring-data-redis  项目,同盟 spring 本性并集成 Jedis
的有的限令和议程。

<?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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
  <description>redis 相关类 Spring 托管</description>

  <!--载入 redis 配置文件-->
  <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>

  <!-- 配置 JedisPoolConfig 实例 -->
  <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="${redis.maxIdle}"/>
    <property name="maxTotal" value="${redis.maxActive}"/>
    <property name="maxWaitMillis" value="${redis.maxWait}"/>
    <property name="testOnBorrow" value="${redis.testOnBorrow}"/>
  </bean>

  <!-- 配置JedisConnectionFactory -->
  <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="${redis.host}"/>
    <property name="port" value="${redis.port}"/>
    <property name="password" value="${redis.pass}"/>
    <property name="database" value="${redis.dbIndex}"/>
    <property name="poolConfig" ref="poolConfig"/>
  </bean>

  <!-- 配置RedisTemplate -->
  <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
    <property name="connectionFactory" ref="jedisConnectionFactory"/>
  </bean>

  <!-- 配置RedisCacheManager -->
  <bean id="redisCacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
    <constructor-arg name="redisOperations" ref="redisTemplate"/>
    <property name="defaultExpiration" value="${redis.expiration}"/>
  </bean>

  <!-- 配置RedisCacheConfig -->
  <bean id="redisCacheConfig" class="com.rambo.sdh.common.util.RedisCacheConfig">
    <constructor-arg ref="jedisConnectionFactory"/>
    <constructor-arg ref="redisTemplate"/>
    <constructor-arg ref="redisCacheManager"/>
  </bean>
</beans>

作者们抬高缓存的支持须要七个依据,贰个是SpringBoot内部的缓存配置、别的则是大家的redis缓存。

即使您熟稔 Spring 的 JdbcTemplate 对象的话,这里大约能猜出来
RedisTemplate 的功效,RedisTemplate 对 RedisConnection 举办了打包。

}

4. 编纂自定义 redis 配置类

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图