专栏名称: hryou0922
目录
相关文章推荐
人人都是产品经理  ·  为什么你招聘的产品助理最后都成了摆设 ·  22 小时前  
产品犬舍  ·  走入羊肠小道的深度图文还有舅妈? ·  昨天  
三节课  ·  一夜炒到10万!这个Manus凭啥比Deep ... ·  4 天前  
人人都是产品经理  ·  能力超过产品总监,你该怎么办? ·  2 天前  
人人都是产品经理  ·  做AI产品带来的思考:拥抱变革,理性前行 ·  2 天前  
51好读  ›  专栏  ›  hryou0922

Redis系列一 - springboot 集成 redis Demo和原理

hryou0922  · 掘金  ·  · 2018-01-24 02:02

正文

1. 概述

本文介绍如何通过springboot集成redis并简单介绍其原理。

2. Demo和原理

2.1. application.properties

application.properties配置参数如下

spring.redis.database=0
spring.redis.host=192.168.188.7
spring.redis.password=
spring.redis.port=6379
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0  
spring.redis.pool.max-active=8  
spring.redis.pool.max-wait=-1

备注 : 如果你要使用集群redis,则可以配置以下参数spring.redis.sentinel.* 或 spring.redis.cluster.*

2.2. RedisProperties

以上参数会被自动封装到RedisProperties中: 此类被@ConfigurationProperties注解,表示从外部文件(如application.properties)注入属性值

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
    /**
     * Database index used by the connection factory.
     */
    private int database = 0;

    /**
     * Redis url, which will overrule host, port and password if set.
     */
    private String url;

    /**
     * Redis server host.
     */
    private String host = "localhost";

    /**
     * Login password of the redis server.
     */
    private String password;

    /**
     * Redis server port.
     */
    private int port = 6379;
    // 其它参数略
}

2.3. RedisAutoConfiguration

因为此类被@EnableConfigurationProperties注解,所以spring boot会触发对RedisProperties执行自动绑定属性值。

此类会自动创建bean对象: redis连接池JedisConnectionFactory和redis模板类(RedisTemplate和StringRedisTemplate)。我们会直接在应用中通过@Autowire注入以上对象

/**
 * EnableAutoConfiguration Auto-configuration for Spring Data's Redis support.
 *
 */
@Configuration
// 如果有以下三个类,则可以初始化此类
@ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class })
// @EnableConfigurationProperties:对RedisProperties执行自动绑定属性值
@EnableConfigurationProperties(RedisProperties.class)
public class RedisAutoConfiguration {

    @Configuration
    //  如果有以下一个类,则可以初始化此类
    @ConditionalOnClass(GenericObjectPool.class)
    protected static class RedisConnectionConfiguration {

        // 初始化JedisConnectionFactory工厂类对象,参数来自RedisProperties
        // 配置参数有:线程池,sentinel,cluster
        @Bean
        @ConditionalOnMissingBean(RedisConnectionFactory.class)
        public JedisConnectionFactory redisConnectionFactory()
            throws UnknownHostException {
            return applyProperties(createJedisConnectionFactory());
        }


    // 配置类 
    @Configuration
    protected static class RedisConfiguration {
        // 初始化bean
        @Bean
        @ConditionalOnMissingBean(name = "redisTemplate")
        public RedisTemplate<Object, Object> redisTemplate(
            RedisConnectionFactory redisConnectionFactory)
                throws UnknownHostException {
            RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }

        // 初始化bean
@Bean       @ConditionalOnMissingBean(StringRedisTemplate.class)
        public StringRedisTemplate stringRedisTemplate(
            RedisConnectionFactory redisConnectionFactory)
                throws UnknownHostException {
            StringRedisTemplate template = new StringRedisTemplate();
            template.setConnectionFactory(redisConnectionFactory);
            return template;
        }

    }

2.4. FirstExample

演示RedisTemplate的用法:







请到「今天看啥」查看全文