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上,需要自取。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgzwy.html