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


| 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 |
mkdir 7001 7002 7003 7101 7102 7103
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"
echo 7001 7002 7003 7101 7102 7103 | xargs -t -n 1 cp redis.conf
然后将修改端口后的redis.conf文件放到对应的目录下。
printf '%s\n' 7001 7002 7003 7101 7102 7103 | xargs -I{} -t /home/redis6.2/redis-6.2.13/bin/redis-server {}/redis.conf
ps -ef | grep redis


具体命令如下:
/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地址。
命令执行结果:

/home/redis6.2/redis-6.2.13/bin/redis-cli -p 7001cluster nodes
集群结果展示:




自己操作一下:






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

手动故障转移:


RedisTemplate底层同样基于lettuce实现了分片集群的支持,而使用的步骤与哨兵模式基本一致:
1.引入redis的Start依赖;
2.配置分片集群地址;
3.配置读写分离。
与哨兵模式相比,其中只有分片集群的配置方式略有差异,如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
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
@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

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


如果大家对相关文章感兴趣,可以关注微信公众号"程序猿小杨",会持续更新优秀文章!欢迎大家 分享、收藏、点赞、在看,您的支持就是我坚持下去的最大动力!谢谢!
参考网站:
https://www.cnblogs.com/shenStudy/p/16859463.html
