【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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值