zoukankan      html  css  js  c++  java
  • springboot 2.X 集成redis

    在实际开发中,经常会引入redis中间件做缓存,这里介绍springboot2.X后如何配置redis
    1 Maven中引入redis
    springboot官方通过spring-boot-autoconfigure和redis的starter包来简化我们的配置工作。

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    

    2 yml中配置redis参数
    springboot2.x后默认使用Lettuce,Lettuce的连接是基于netty的,满足多线程下的并发访问,也可以使用jedis,但是jedis在多线程下线程不安全,需要使用连接池。

    2.1 Lettuce配置

    spring:
      #redis基础配置
      redis:
        host: 127.0.0.1
        port: 6379
        timeout: 3000
        database: 1
        password:
        #lettuce连接池配置
        lettuce:
          pool:
            min-idle: 0
            max-idle: 5
            max-active: 8
            max-wait: -1
    

    3 自定义RedisTemplate
    springboot中默认提供了RedisTemplate<K,V>和StringRedisTemplate,RedisTemplate中默认使用JdkSerializationRedisSerializer来实现序列化,是通过字节数组来保存数据,
    StringRedisTemplate是继承了RedisTemplate,默认使用StringRedisSerializer来实现序列化。我们可以通过自定义一个RedisTemplate<String, Object>,方便项目中使用。

    @Configuration
    public class LettuceRedisConfig {
        @Bean
        public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory) {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
            redisTemplate.setConnectionFactory(connectionFactory);
            return redisTemplate;
        }
    }
    

    到这里就配置完成了,我们就可以使用RedisTemplate<String, Object>来操作redis。
    2.2 yml配置jedis

    spring:
      #redis基础配置
      redis:
        host: 127.0.0.1
        port: 6379
        timeout: 3000
        database: 1
        password:
        #jedis 连接池配置
        jedis:
          pool:
            # 连接池中的最小空闲连接 默认 0
            min-idle: 0
            # 连接池中的最大空闲连接 默认 8
            max-idle: 5
            # 连接池最大连接数(使用负值表示没有限制) 默认 8
            max-active: 8
            # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
            max-wait: -1
    

    3.jedis配置

    /**
     * 连接池配置信息
     */
    @Bean
    public JedisPoolConfig jedisPoolConfig() {
    	JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    	// 最大连接数
    	jedisPoolConfig.setMaxTotal(maxActive);
    	// 当池内没有可用连接时,最大等待时间
    	jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
    	// 最大空闲连接数
    	jedisPoolConfig.setMinIdle(maxIdle);
    	// 最小空闲连接数
    	jedisPoolConfig.setMinIdle(minIdle);
    	// 其他属性可以自行添加
    	return jedisPoolConfig;
    }
    
    /**
     * Jedis 连接
     *
     * @param jedisPoolConfig
     * @return
     */
    @Bean
    public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
    	JedisClientConfiguration jedisClientConfiguration = JedisClientConfiguration.builder().usePooling()
    			.poolConfig(jedisPoolConfig).and().readTimeout(Duration.ofMillis(timeout)).build();
    	RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
    	redisStandaloneConfiguration.setHostName(host);
    	redisStandaloneConfiguration.setPort(port);
    	redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
    	redisStandaloneConfiguration.setDatabase(database);
    	return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
    }
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
    	RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    	redisTemplate.setKeySerializer(new StringRedisSerializer());
    	redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    	redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
    	redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    	redisTemplate.setConnectionFactory(jedisConnectionFactory(jedisPoolConfig()));
    	//开启事务,默认关闭,不涉及redis事务就不要开启,可能导致获取错误的存储信息
    	//redisTemplate.setEnableTransactionSupport(true);
    	return redisTemplate;
    }
    

    到这里就配置完成了,我们就可以使用RedisTemplate<String, Object>来操作redis。

    实际开发中可以根据实际应用和熟悉程度来选择Jedis和Lettuce,
    Jedis和Lettuce相关配置代码和单元测试代码已经提交到git上,需要自取。

  • 相关阅读:
    helix matrix 螺旋矩阵
    利用基数排序生成100个1000以内顺序排列的随机数
    第三次随笔
    gSoap: How to add info to SOAP Header using gSOAP(转)
    sizeof empty class object
    C++基础回顾字符串地址比较
    (转)RVA相对虚拟地址解释
    团队建设历史经验回顾
    C++全局变量的生老病死
    C++基础回顾强制类型转换
  • 原文地址:https://www.cnblogs.com/homeSicker/p/13177730.html
Copyright © 2011-2022 走看看