springboot2.X集成redis使用的默认客户端是 lettuce,下面我们分别使用lettuce和jedis作为客户端来配置spring boot 2.X集成redis.
1、使用默认的lettuce作为客户端连接工具
依赖直接使用spring boot集成的redis即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、我们做个自定义序列化的配置类,默认的序列化泛型的value是String,处理对象时需要转换
@Configuration
public class LettuceRedisConfig {
/**
* 自定义序列化
* @param connectionFactory
* @return RedisTemplate
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
测试类执行如下:结果测试成功
@Resource
private RedisTemplate<String, Object> redisTemplateObject;
@Test
public void objectTest(){
ValueOperations<String,Object> valueOperations = redisTemplateObject.opsForValue();
valueOperations.set("hello", "redis");
System.out.println("useRedisDao = " + valueOperations.get("hello"));
}
3、使用jedis作为客户端连接工具,以来中需要去掉默认配置和加入jedis的依赖
<!--集成redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!--默认的客户端链接方式是lettuce,如果要使用jedis作为客户端连接工具,增加下面的exclusions-->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加jedis客户端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
4、Jedis连接池配置类
@Configuration
public class JedisRedisConfig {
//地址和端口号设置
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.timeout}")
private int timeout;
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
@Value("${spring.redis.jedis.pool.max-wait}")
private long maxWaitMillis;
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
/**
* 连接池信息配置:
* @return JedisPoolConfig
*/
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 最大连接数
jedisPoolConfig.setMaxTotal(maxActive);
// 最大空闲连接数
jedisPoolConfig.setMinIdle(maxIdle);
// 最小空闲连接数
jedisPoolConfig.setMinIdle(minIdle);
// 其他属性可以自行添加
return jedisPoolConfig;
}
/**
* 客户端连接:使用自定义的连接池
* @return JedisConnectionFactory
*/
@Bean
public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig){
JedisClientConfiguration build = JedisClientConfiguration.builder().usePooling().
poolConfig(jedisPoolConfig).and().readTimeout(Duration.ofMillis(timeout)).build();
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(host);
redisStandaloneConfiguration.setPort(port);
return new JedisConnectionFactory(redisStandaloneConfiguration,build);
}
/**
* 自定义序列化
* @return
*/
@Bean
public RedisTemplate<String, Serializable> redisTemplate() {
RedisTemplate<String, Serializable> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(jedisConnectionFactory(jedisPoolConfig()));
return redisTemplate;
}
/**
* 缓存管理器
* @return RedisCacheManager
*/
@Bean
public RedisCacheManager cacheManager() {
return RedisCacheManager.create(jedisConnectionFactory(jedisPoolConfig()));
}
}