微信公众号访问地址:【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、客户端请求可以访问集群任意节点,最终都会被转发到正确节点。
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 7001
cluster-enabled yes
# 集群的配置文件名称,有redis自身维护
cluster-config-file /home/redis6.2/7001/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /home/redis6.2/7001
# 绑定IP
bind 0.0.0.0
# redis后台运行
daemonize yes
# 注册的实例IP
replica-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 7001
cluster nodes
集群结果展示:
自己操作一下:
不需要哨兵,自动故障转移
手动故障转移:
RedisTemplate底层同样基于lettuce实现了分片集群的支持,而使用的步骤与哨兵模式基本一致:
1.引入redis的Start依赖;
2.配置分片集群地址;
3.配置读写分离。
与哨兵模式相比,其中只有分片集群的配置方式略有差异,如下:
org.springframework.boot
spring-boot-starter-data-redis
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
@Bean
public 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