Window下搭建redis哨兵环境并集成到SpringBoot(全网最详细)

1、下载redis
(1).redis下载地址:

Releases · tporadowski/redis · GitHubNative port of Redis for Windows. Redis is an in-memory database that persists on disk. The data model is key-value, but many different kind of values are supported: Strings, Lists, Sets, Sorted Sets, Hashes, Streams, HyperLogLogs. This repository contains unofficial port of Redis to Windows. - Releases · tporadowski/redisicon-default.png?t=N7T8https://github.com/tporadowski/redis/releases

(2).解压到文件夹

将下载的压缩包解压到指定的文件夹中,如:E:\Redis01,内容如下:

2、把安装包复制到两台服务器上面

新建startup6379.bat文件
redis-server.exe ./redis.windows.conf 用于启动master 6379
同样在从服务器也新建一个startup6380.bat 用于启动redis 6380

修改从服务器redis.windows.conf文件

port 6380
slaveof 10.10.17.202 6379

3、测试主从模式

4、哨兵配置
在主从模式搭建成功之后

哨兵配置

每一个redis节点目录中都创建一个文sentinel.conf文件

Master 6379sentinel.conf文件配置如下

port 26379

sentinel monitor mymaster 10.10.17.202 6379 1

Slave 6380中的sentinel.conf文件配置

port 26380

sentinel monitor mymaster 10.10.17.202 6379 1

每个Redis目录下新建startup_sentinel.bat

redis-server.exe sentinel.conf --sentinel

启动Redis
6379

6380

启动sentinel

执行startup_sentinel.bat文件

启动redis-cli.exe 

redis-cli -p 6379

info replication

redis-cli -p 6380
info replication

启动sentinel 

redis-cli.exe -p 26379
info sentinel

5、redis主从自动failover测试

1、停止6379
2、查看6380 可以看到6380变为了master
由此可见实现了主从切换

redis-cli.exe -p 6380
info replication

3、再查看sentinel

redis-cli.exe -p 26379
info sentinel

6、springboot整合redis哨兵

导入依赖

<!-- Redis依赖 -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-redis</artifactId>

        </dependency>

yml配置:

spring:

  redis:

        database: 0

        host: 192.168.0.186

        port: 6379

        password:

        pool:

           jedis:

             max-active: 30

             max-wait: -1

             max-idle: 30

             min-idle: 0

            sentinel:

              master: mymaster   # Redis主节点的名称

              nodes:   # Redis Sentinel监视的节点列表

                  - 192.168.0.186:26379

                  - 192.168.0.186:26380

RedisConfig配置类
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig {

    /**
     * 配置自定义redisTemplate
     *
     * @return
     */
    @Bean
    RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);

        template.setValueSerializer(serializer);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        // hash的value也采用jackson的序列化
        template.setHashKeySerializer(new StringRedisSerializer());
        //hash的value也采用jackson的序列化
        template.setHashValueSerializer(serializer);
        template.afterPropertiesSet();
        return template;
    }
    /**
     * 配置读写分离
     * @param redisProperties
     * @return
     */
    @Bean
    public RedisConnectionFactory lettuceConnectionFactory(RedisProperties redisProperties) {
        if (redisProperties.getSentinel() != null && redisProperties.getSentinel().getNodes() != null
                && !redisProperties.getSentinel().getNodes().isEmpty()
                && redisProperties.getSentinel().getMaster() != null) {
            // 配置哨兵节点以及主节点
            RedisSentinelConfiguration redisSentinelConfiguration = new RedisSentinelConfiguration(
                    redisProperties.getSentinel().getMaster(), new HashSet<>(redisProperties.getSentinel().getNodes())
            );
            if (redisProperties.getPassword() != null) {
                redisSentinelConfiguration.setPassword(redisProperties.getPassword());
            }
            // 配置读写分离
            LettucePoolingClientConfiguration lettuceClientConfiguration = LettucePoolingClientConfiguration.builder()
                    // 读写分离,这里的ReadFrom是配置Redis的读取策略,是一个枚举,包括下面选择
                    // MASTER   仅读取主节点
                    // MASTER_PREFERRED   优先读取主节点,如果主节点不可用,则读取从节点
                    // REPLICA_PREFERRED   优先读取从节点,如果从节点不可用,则读取主节点
                    // REPLICA   仅读取从节点
                    // NEAREST   从最近节点读取
                    // ANY   从任意一个从节点读取
                    .readFrom(ReadFrom.MASTER_PREFERRED)
                    .build();

            return new LettuceConnectionFactory(redisSentinelConfiguration, lettuceClientConfiguration);
        } else {
            // 没有配置 Sentinel,使用单节点连接方式
            RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
            redisStandaloneConfiguration.setHostName(redisProperties.getHost());
            redisStandaloneConfiguration.setPort(redisProperties.getPort());
            redisStandaloneConfiguration.setPassword(RedisPassword.of(redisProperties.getPassword()));
            LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
            lettuceConnectionFactory.afterPropertiesSet(); // 手动触发初始化

            return lettuceConnectionFactory;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值