SpringBoot整合Redis

SpringBoot整合

springboot2.x之后,原来使用的jedis被替换成了lettuce

jedis:采用的直连,多个线程操作的话是不安全的,要避免这个问题就需要使用jedis pool连接池,类似BIO

lettuce:采用netty,实例可以在多个线程中进行共享,不存在线程不安全,可以减少线程数量,类似NIO

redis源码分析

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {

@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
       //默认的RedisTemplate没有过多的设置,redis对象都是需要序列化
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}

@Bean
@ConditionalOnMissingBean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}

}

第一步入依赖

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

第二步配置连接

# SpringBoot 所有的配置类,都有一个自动配置类 RedisAutoConfiguration
# 自动配置类都会绑定一个properties         RedisProperties
spring.redis.host=127.0.0.1
spring.redis.port=6379

第三步自定义一个RedisTemplate

@Configuration
public class RedisConfig {
   @Bean
   public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
   throws UnknownException {
       RedisTemplate<String,Object> redisTemplate = new RedisTemplate<String, Object>();
       redisTemplate.setConnectionFactory(redisConnectionFactory);
       //配置具体的序列化方式
       Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
       ObjectMapper om = new ObjectMapper();
       om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
       om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
       objectJackson2JsonRedisSerializer.setObjectMapper(om);
       StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
       //key采用String的序列号方式
       redisTemplate.setKeySerializer(stringRedisSerializer);
       //hash的key也采用String的序列化方式
       redisTemplate.setHashKeySerializer(stringRedisSerializer);
       //value序列号方式采用jackson
       redisTemplate.setValueSerializer(objectJackson2JsonRedisSerializer);
       //hash的value方式采用jackson
       redisTemplate.setHashValueSerializer(objectJackson2JsonRedisSerializer);
       redisTemplate.afterPropertiesSet();
       return redisTemplate;
  }
}

推荐编写一个RedisUtils类,方便直接调用

本文系作者 @ 原创发布在 IT梦。未经许可,禁止转载。

喜欢()
0 0 投票数
Article Rating
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
27 文章
12 评论
76 喜欢
Top
0
希望看到您的想法,请您发表评论x
()
x