【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、客户端请求可以访问集群任意节点,最终都会被转发到正确节点。

【Redis高级篇】分片集群--并发_第1张图片

 二、环境搭建

【Redis高级篇】分片集群--并发_第2张图片

2.1、IP准备

IP 端口 角色
127.0.0.1 7001 master
127.0.0.1 7002 master
127.0.0.1 7003 master
127.0.0.1 7101 slave
127.0.0.1 7102 slave
127.0.0.1 7103 slave

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

【Redis高级篇】分片集群--并发_第3张图片

2.7、分配集群节点

【Redis高级篇】分片集群--并发_第4张图片

具体命令如下:

/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地址。

命令执行结果:

【Redis高级篇】分片集群--并发_第5张图片

2.8、查看集群状态 

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

集群结果展示:

【Redis高级篇】分片集群--并发_第6张图片

三、散列插散

【Redis高级篇】分片集群--并发_第7张图片

【Redis高级篇】分片集群--并发_第8张图片

【Redis高级篇】分片集群--并发_第9张图片

四、集群伸缩

自己操作一下:

【Redis高级篇】分片集群--并发_第10张图片

【Redis高级篇】分片集群--并发_第11张图片

【Redis高级篇】分片集群--并发_第12张图片

【Redis高级篇】分片集群--并发_第13张图片

【Redis高级篇】分片集群--并发_第14张图片

五、故障转移

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

【Redis高级篇】分片集群--并发_第15张图片

手动故障转移:

【Redis高级篇】分片集群--并发_第16张图片

【Redis高级篇】分片集群--并发_第17张图片

六、使用RedisTemplate访问

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

    1.引入redis的Start依赖;

    2.配置分片集群地址;

    3.配置读写分离。

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

6.1、引入redis的starter依赖

    org.springframework.boot    spring-boot-starter-data-redis

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);        }    };}

或参考如下:

【Redis高级篇】分片集群--并发_第18张图片

七、错误解决方案:

1、moved 异常和解决办法

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

【Redis高级篇】分片集群--并发_第19张图片

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

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

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

【Redis高级篇】分片集群--并发_第20张图片

八、Redis的window版本获取方式

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

【Redis高级篇】分片集群--并发_第21张图片

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

参考网站:

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

【Redis高级篇】分片集群--并发_第22张图片

你可能感兴趣的:(Redis,redis,数据库)