Redis-分片集群

分片集群

主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:

  • 海量数据存储问题

  • 高并发写的问题

使用分片集群可以解决上述问题,如图:

分片集群特征:

  • 集群中有多个master,每个master保存不同数据

  • 每个master都可以有多个slave节点

  • master之间通过ping监测彼此健康状态

  • 客户端请求可以访问集群任意节点,最终都会被转发到正确节点

散列插槽

插槽原理

Redis会把每一个master节点映射到0~16383共16384个插槽(hash slot)上,查看集群信息时就能看到:

数据key不是与节点绑定,而是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:

  • key中包含"{}",且"{}"中至少包含1个字符,"{}"中的部分是有效部分

  • key中不包含"{}",整个key都是有效部分

小结

redis如何判断某个key应该在哪个实例?

  • 将16384个插槽分配到不同的实例

  • 根据key的有效部分计算哈希值,对16384取余

  • 余数作为插槽,寻找插槽所在实例即可

如何将同一类数据固定的保存在同一个Redis实例

这一类数据使用相同的有效部分,例如key都以{typeId}为前缀,来保证同一业务场景下的数据在同一个redis实例下,保证了性能,这也是我们要在业务代码中,要在key前面加上统一的业务前缀的原因之一。

集群伸缩

redis-cli --cluster提供了很多操作集群的命令,可以通过下面方式查看:

比如,添加节点的命令:

相关推荐
北亚数据恢复2 小时前
【数据库数据恢复】NDF文件变0KB、数据库损坏?超大数据库数据恢复案例
数据库·oracle
xiaoqiMikko3 小时前
Redis 实战(一):内存满了 —— 拒写、淘汰、被系统杀掉,以及删了 key 内存为什么不降(6.2.4 实测)
redis·后端
数据技术说3 小时前
数据库缓存架构深度解析:命中率、一致性、多层缓存管理
数据库·架构
dishugj3 小时前
系统架构风险点、敏感点和权衡点的概念和区分
java·开发语言
苜蓿muxu3 小时前
常用代码命名规范
java
马优晨3 小时前
JAVA 中 VO 实体类是什么意思,为什么要做这个
java·开发语言·状态模式·java vo·java vo是什么
Baron X4 小时前
Eclipse Temurin 21 (JRE) Alpine 镜像获取、离线导入与推送操作
java·docker·eclipse·temurin
CJi0NG4 小时前
【自用】MySQL-多表查询
数据库·mysql
雨落在了我的手上4 小时前
MySQL数据库基础(12):事务
数据库·mysql