• 【Redis高级篇】分片集群--并发


    微信公众号访问地址:【Redis高级篇】分片集群--并发

    近期热推文章:

        1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表;

        2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据;

        3、基于Redis的Geo实现附近商铺搜索(含源码)

        4、基于Redis实现关注、取关、共同关注及消息推送(含源码)

        5、SpringBoot整合多数据源,并支持动态新增与切换(详细教程)

        6、基于Redis实现点赞及排行榜功能

    一、简介

    为什么选择分片集群?

    主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:

        1、海量数据存储问题;2、高并发写的问题。

    使用分片集群可以解决上述问题,分片集群特征:

    • 1、集群中有多个master,每个master保存不同数据;

    • 2、每个master都可以有多个slave节点;

    • 3、master之间通过ping监测彼此健康状态;

    • 4、客户端请求可以访问集群任意节点,最终都会被转发到正确节点。

     二、环境搭建

    2.1、IP准备

    IP端口角色
    127.0.0.17001master
    127.0.0.17002master
    127.0.0.17003master
    127.0.0.17101slave
    127.0.0.17102slave
    127.0.0.17103slave

    2.2、创建7001、7002等目录

     mkdir 7001 7002 7003 7101 7102 7103

    2.3、集群配置参数

    port 7001cluster-enabled yes# 集群的配置文件名称,有redis自身维护cluster-config-file /home/redis6.2/7001/nodes.conf# 节点心跳失败的超时时间cluster-node-timeout 5000# 持久化文件存放目录dir /home/redis6.2/7001# 绑定IPbind 0.0.0.0 # redis后台运行daemonize yes# 注册的实例IPreplica-announce-ip 127.0.0.1# 保护模式protected-mode no# 指定数据库数量 也可以不配置databases 1# 日志文件logfile "/home/redis6.2/7001/redis_7001.log"
    

    2.4、将文件拷贝到每个目录下

     echo 7001 7002 7003 7101 7102 7103 | xargs -t -n 1 cp redis.conf 

    然后将修改端口后的redis.conf文件放到对应的目录下。

    2.5、启动7001、7002等服务

    printf '%s\n' 7001 7002 7003 7101 7102 7103  | xargs -I{} -t /home/redis6.2/redis-6.2.13/bin/redis-server {}/redis.conf

    2.6、查看启动后的服务

    ps -ef | grep redis

    2.7、分配集群节点

    具体命令如下:

    /home/redis6.2/redis-6.2.13/bin/redis-cli --cluster create --cluster-replicas 1 IP:7001 IP:7002 IP:7003 IP:7101 IP:7102 IP:7103

    备注:ip为自己服务器的IP地址。

    命令执行结果:

    2.8、查看集群状态 

    /home/redis6.2/redis-6.2.13/bin/redis-cli -p 7001cluster nodes

    集群结果展示:

    三、散列插散

    四、集群伸缩

    自己操作一下:

    五、故障转移

    不需要哨兵,自动故障转移

    手动故障转移:

    六、使用RedisTemplate访问

    RedisTemplate底层同样基于lettuce实现了分片集群的支持,而使用的步骤与哨兵模式基本一致:

        1.引入redis的Start依赖;

        2.配置分片集群地址;

        3.配置读写分离。

    与哨兵模式相比,其中只有分片集群的配置方式略有差异,如下:

    6.1、引入redis的starter依赖

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

    6.2、配置分片集群地址

    spring:  redis:    cluster:      nodes:        - 127.0.0.1:7001        - 127.0.0.1:7002        - 127.0.0.1:7003        - 127.0.0.1:7101        - 127.0.0.1:7102        - 127.0.0.1:7103

    6.3、配置读写分离

    @Beanpublic LettuceClientConfigurationBuilderCustomizer configurationBuilderCustomizer(){    return new LettuceClientConfigurationBuilderCustomizer(){        public void customize(LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigurationBuilder) {            clientConfigurationBuilder.readFrom(ReadFrom.REPLICA);        }    };}

    或参考如下:

    七、错误解决方案:

    1、moved 异常和解决办法

     /home/redis6.2/redis-6.2.13/bin/redis-cli -p 7003

    原因客户端访问的键值不在该节点上回触发 moved 异常,moved 异常会告诉客户端它想操作的键值在哪个节点上。

    解决方案加 -c 会重定向到这个 key 应该存储的节点。

     /home/redis6.2/redis-6.2.13/bin/redis-cli -c -p 7003

    八、Redis的window版本获取方式

      请关注个人微信公众号或搜索“程序猿小杨”查阅。然后回复:工具,可以获取最新的window版本的Redis6.2的安装包。

           如果大家对相关文章感兴趣,可以关注微信公众号"程序猿小杨",会持续更新优秀文章!欢迎大家 分享、收藏、点赞、在看,您的支持就是我坚持下去的最大动力!谢谢!

    参考网站:

    https://www.cnblogs.com/shenStudy/p/16859463.html

  • 相关阅读:
    Spring源码:Bean生命周期(五)
    计算机毕业设计ssm软件项目Bug管理系统612ed系统+程序+源码+lw+远程部署
    Android开发基础——Kotlin:高阶函数
    美食杰项目 -- 总结(八)
    yarn 包管理器设置淘宝镜像和sass镜像
    17. 机器学习——SVM
    Javascript 中的堆、栈、引用和值指南
    Pandas数据分析33——数据多条件筛选(点估计和区间估计评价指标)
    【JVM技术专题】史上最清晰的探究和分析(Safe Point+Safe Region)的原理和运行机制「上篇」
    力扣刷题-数组-数组理论基础
  • 原文地址:https://blog.csdn.net/qq_35989920/article/details/133767347