Redis—分布式缓存
目录
分布式缓存
Reids分片集群
主从和哨兵可以解决高可用、高并发读的问题,但依然有两个问题
-
海量数据存储问题
-
高并发写的问题
特征:
-
集群中有多个master,每个master保存不同数据
-
每个master都可以有多个slave节点
-
master之间通过ping监测健康状态
-
客户端请求可以访问集群任意节点,最终都会转发到正确节点

搭建分片集群
文件Redis集群.md
散列插槽
Redis会把每一个mater节点映射到0~16383共16384个插槽(hash slot)上,查看集群信息就能看到

数据key不是与节点绑定,而是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:
-
key中包含“{}”,且{}中至少包含1个字符,{}中的部分是有效部分
-
key中不包含{},整个key都是有效部分
例如:key是num,那么就根据num计算,如果是{itcast}num,则根据itcast计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值
Redis判断某个key实例在哪方案:
-
将16384个插槽分配到不同的实例
-
根据key的有效部分计算哈希值,对16384取余
-
余数作为插槽,寻找插槽所在实例即可
当同一类商品插槽一样解决方案(不熟):
-
这一类数据使用相同的有效部分,例如Key都以{typeld}为前缀
集群伸缩
添加或移除节点
添加一个节点到集群:
-
redis-cli --cluster提供了很多操作集群的命令,如
| 命令 | 功能描述 |
|---|---|
create |
创建新集群 |
check |
检查集群状态 |
info |
查看集群信息 |
fix |
修复集群问题 |
reshard |
重新分片 |
rebalance |
重新平衡槽位 |
add-node |
添加新节点 |
del-node |
删除节点 |
set-timeout |
设置节点超时时间 |
call |
在所有节点执行命令 |
import |
从外部导入数据 |
help |
显示帮助信息 |
-
添加节点命令为:

故障转移
当集群中有一个master宕机发生的情况:
1、首先是该实例与其他实例失去连接
2、疑似宕机

3、最后确定下线,自动提升一个slave为新的master

数据迁移(手动故障)
利用cluster failover命令可以手动让集群中某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移
手动的Failover支持三种不同模式:
-
缺省:默认的流程,如图
-
force:省略对offset的一致性校验
-
takeover:执行第5步,忽略一致性、忽略maste
r状态和其他master的意见
RedisTemplate访问分片集群
RedisTemplate底层同样基于lettuce实现分片集群的支持,而使用的步骤与哨兵模式基本一致:
1、引入redis的starter依赖
2、配置分片集群地址
3、配置读写分离
与哨兵模式相比,其中只有分片集群的配置略有差异:

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)