1、依赖
POM
<!-- spring boot redis 缓存引入 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- lettuce pool 缓存连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2、约定
application.properties
redis.sentinel.nodes=luliang888.top:26379,luliang888.top:26380,luliang888.top:26381
redis.sentinel.master.name=mymaster
redis.auth=123456
redis.database=0
redis.pool.maxTotal=10
redis.pool.maxIdle=5
redis.pool.minIdle=3
redis.pool.testOnBorrow=true
3、配置
package com.example.redis.config;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
@Configuration
public class RedisConfig {
@Bean("redisSentinelConfiguration")
public RedisSentinelConfiguration getRedisSentinelConfiguration(
@Value("${redis.sentinel.nodes}") String nodes,
@Value("${redis.sentinel.master.name}") String masterName,
@Value("${redis.auth}") String password,
@Value("${redis.database}") int database
) {
Set<String> redisNodes = new HashSet<>();
redisNodes.addAll(Arrays.asList(nodes.split(",")));
RedisSentinelConfiguration configuration = new RedisSentinelConfiguration(masterName, redisNodes);
configuration.setDatabase(database);
configuration.setPassword(password);
return configuration;
}
@Bean("objectPoolConfig")
public GenericObjectPoolConfig getObjectPoolConfig(
@Value("${redis.pool.maxTotal}") int maxTotal,
@Value("${redis.pool.maxIdle}") int maxIdle,
@Value("${redis.pool.minIdle}") int minIdle,
@Value("${redis.pool.testOnBorrow}") boolean testOnBorrow
) {
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMaxTotal(maxTotal);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setTestOnBorrow(testOnBorrow);
return poolConfig;
}
@Bean("lettuceClientConfiguration")
public LettuceClientConfiguration getLettuceClientConfiguration(
@Autowired GenericObjectPoolConfig poolConfig
) { // 创建Lettuce组件的连接池客户端配置对象
return LettucePoolingClientConfiguration.builder().poolConfig(poolConfig).build();
}
@Bean("redisConnectionFactory")
public RedisConnectionFactory getConnectionFactory(
@Autowired RedisSentinelConfiguration redisSentinelConfiguration,
@Autowired LettuceClientConfiguration lettuceClientConfiguration
) {
LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(redisSentinelConfiguration, lettuceClientConfiguration);
return connectionFactory;
}
@Bean("redisTemplate")
public RedisTemplate getRedisTempalate(
@Autowired RedisConnectionFactory connectionFactory
) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer()); // 数据的key通过字符串存储
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); // 保存的value为对象
redisTemplate.setHashKeySerializer(new StringRedisSerializer()); // 数据的key通过字符串存储
redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); // 保存的value为对象
return redisTemplate;
}
@Bean("stringRedisTemplate")
public StringRedisTemplate getStringRedisTemplate(
@Autowired RedisConnectionFactory connectionFactory
) {
StringRedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
4、测试
@Test
void testRedisTemplate() {
redisTemplate.opsForValue().set("name", "学习");
System.out.println(redisTemplate.opsForValue().get("name"));
}