redis集群 redis锁
1.Redis集群是一个提供在多个redis节点间共熟数据的程序集。
2.redis集群的数据分片
(1)Redis没有使用一致性hash而是引入hash槽的概念。
(2)Redis集群共有16384个hash槽(不管redis有几台机器,整个集群一共有16384个hash槽)。每个key经过CRC16校验后,对16384取余来决定放到哪个hash槽。
(3)比如一个集群有A、B、C、3台机器,那么
节点A,包括0到5500号hash槽
节点B,包含 5501到11000hash槽
节点C,包含11001到16384号hash槽
3.slot存储
(1)Bit位存储
(2)1个slot
3.redis集群的优势
(1)集群通过分区,提供一定程度的可用性
(2)自动把数据路由到不同的结点上
(3)整个集群的部分节点不可用或不可达时,其余节点可继续处理
4.redis的主从复制模型
(1)每个主节点都有 n+1个slave,为了保证在master不可用时,能够快速把slave切换成master
(2)主从的数据复制,采用的是异步复制,
I.客户端写请求
II.master写入,告诉客户端写成功了
III.数据从master复制到Slave
所以说redis集群的一致性只是弱一致性
5.重新分片,使用reshard命令可以增加节点,重新分槽
./redis-trib.rb reshard 127.0.0.1:7000
6.reids集群与CPA理论
(1)CAP,一致性,原子性,分区容错性,三者不可兼得,只有取其中的一种,最多两种,
(2)redis从单机变成集群后,由一致性、原子性(CA)变成了一致性,分区容错性(CP)
7.redis锁
SETNX set if not exist