<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
import io.lettuce.core.ClientOptions;
import io.lettuce.core.SocketOptions;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
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.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
@Configuration //配置类
@Slf4j
public class CacheRedisTemplateConfig{
private String host="127.0.0.1";
private Integer database=1;
private Integer port=6379;
private String password="12345678";
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 配置连接工厂
template.setConnectionFactory(lettuceConnectionFactory());
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key 都使用String 序列化方式
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
template.setHashValueSerializer(genericJackson2JsonRedisSerializer);
template.setValueSerializer(genericJackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
public LettuceConnectionFactory lettuceConnectionFactory(){
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName(host);
config.setPort(port);
config.setPassword(RedisPassword.of(password));
config.setDatabase(database);
SocketOptions socketOptions = SocketOptions.builder().connectTimeout(Duration.ofMillis(600)).build();
ClientOptions standaloneClientOptions = ClientOptions.builder()
.socketOptions(socketOptions)
.build();
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxIdle(10);
genericObjectPoolConfig.setMinIdle(5);
genericObjectPoolConfig.setMaxTotal(100);
genericObjectPoolConfig.setMaxWaitMillis(5000);
genericObjectPoolConfig.setTimeBetweenEvictionRunsMillis(1000);
LettuceClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
.commandTimeout(Duration.ofSeconds(1))
.shutdownTimeout(Duration.ofMillis(100))
.poolConfig(genericObjectPoolConfig)
.clientOptions(standaloneClientOptions)
.build();
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(config,clientConfig);
lettuceConnectionFactory.afterPropertiesSet();
return lettuceConnectionFactory;
}
}