SpringBoot 1.x + RedisTemplate + Lettuce 连接池实现 Redis 主从同步 + 哨兵模式配置

本文将介绍如何在 SpringBoot 1.x 版本中使用 Lettuce 连接池实现 Redis 主从同步和哨兵模式配置。

1. 引入依赖

pom.xml 文件中引入以下依赖:

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

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
</dependency>

2. RedisTemplate 配置

在 SpringBoot 1.x 版本中,可以通过实现 org.springframework.data.redis.connection.RedisConnectionFactory 接口来自定义 Redis 连接工厂。这里我们使用 Lettuce 连接池来实现 Redis 主从同步和哨兵模式配置。

@Configuration
public class RedisConfig {

    @Value('${spring.redis.host}')
    private String host;

    @Value('${spring.redis.port}')
    private int port;

    @Value('${spring.redis.password}')
    private String password;

    @Value('${spring.redis.database}')
    private int database;

    @Value('${spring.redis.sentinel.master}')
    private String master;

    @Value('${spring.redis.sentinel.nodes}')
    private String nodes;

    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(lettuceConnectionFactory);

        // 设置key和value的序列化方式
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        // 设置hash key和value的序列化方式
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    @Bean
    public LettuceConnectionFactory lettuceConnectionFactory() {
        RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration();
        sentinelConfiguration.master(master);
        sentinelConfiguration.setSentinels(parseSentinels());

        LettuceClientConfiguration clientConfiguration = LettuceClientConfiguration.builder()
                .commandTimeout(Duration.ofSeconds(10))
                .build();

        return new LettuceConnectionFactory(sentinelConfiguration, clientConfiguration);
    }

    private Set<RedisNode> parseSentinels() {
        String[] nodesArr = nodes.split(',');
        Set<RedisNode> sentinelNodes = new HashSet<>();
        for (String node : nodesArr) {
            String[] parts = node.split(':');
            sentinelNodes.add(new RedisNode(parts[0], Integer.parseInt(parts[1])));
        }
        return sentinelNodes;
    }
}

在上面的代码中,我们使用了 RedisSentinelConfiguration 来配置哨兵模式,并使用 LettuceClientConfiguration 来配置连接池信息。

3. 配置文件

application.propertiesapplication.yml 中配置 Redis 相关信息。

# Redis主从同步配置
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0

# 哨兵模式配置
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381

4. 测试

在代码中使用 Autowired 注入 RedisTemplate,然后使用其提供的方法操作 Redis 即可。

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public void testRedis() {
    redisTemplate.opsForValue().set('name', 'tom');
    String name = (String) redisTemplate.opsForValue().get('name');
    System.out.println(name);
}
SpringBoot 1.x Redis 主从同步 + 哨兵模式配置 | Lettuce 连接池实现

原文地址: https://www.cveoy.top/t/topic/nPUR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录