Redis分配存储集群
Redis集群的分片存储是在Redis3.0以后推出的架构方案。整个架构如下
1.在整个集群中,Redis会对每台机器分配一段槽位-solt,总共有16384个槽位(0-16383),也就是我们的集群最多可以是16384太机器,集群中节点之间会互相交换节点信息,传递消息,包括槽位的信息,如果集群过大,交互的信息会很多,会带来带宽的消耗,所以Redis官方建议最大1000个实例。
2.Redis-server接受到一条数据是,会通过key进行hash计算,确认槽位,这里有点类似concurrentHashMap的操作,确定一个segment后才去操作
3.发送数据到集群的任何一台机器,如果不是槽位不匹配,服务端会做重定向的返回信息
4.客户端可以缓存集群信息,减少与服务端的网络开销,当集群扩容是,会对新的机器分配一段槽位(注意这里是将16384进行调整,分配一段到新的机器)
集群通信
集群中各几点的通信是通过TCP端口来相互通信
ask和moved重定向的区别
1.ask:若确定slot不属于当前节点,Redis会返回moved
2.Redis节点处理slot数据迁移时,key暂时不在该节点,会返回ask
如何避免节点数据倾斜
1.前期规划key,解决热点数据的问题
2.slot槽位迁移