1.什么是redis集群
Redis集群是一种Redis的高可用和扩展性的技术方案。它通过将数据分布在多个节点(片)上,每个节点(片)负责数据集的一部分,从而可以扩展存储容量和并发处理能力,解决了单个Redis实例的内存和并发限制问题
2.redis集群能干嘛
(1)数据分布式存储:Redis集群可以将数据分布在多个节点上,每个节点负责存储数据集的一部分,从而提供更高的存储容量和并发处理能力。
(2)高可用性:通过配置多个主节点和从节点,Redis集群可以实现故障转移和高可用性。当主节点发生故障时,从节点可以被提升为新的主节点,确保服务的持续可用性。
(3)读写分离:在Redis集群中,每个主节点都可以处理读和写请求,从而提供更高的响应能力。同时,可以从多个从节点中读取数据,进一步提高读取性能。
(4)容错性:Redis集群提供了容错机制,可以通过配置多个从节点来确保数据的持久性和可靠性。当主节点发生故障时,从节点可以自动提升为新的主节点,继续提供服务。
(5)自动分片:Redis集群通过哈希槽来决定数据存储的位置,自动将数据分片存储到不同的节点上,简化了数据分片的操作。
(6)扩展性:Redis集群可以轻松地通过增加更多的节点来扩展存储容量和并发处理能力,满足不断增长的性能需求。
3.redis哈希槽(slot)
redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放到哪个槽,集群的每个节点负责一部分哈希槽
例如3个redis实例的集群
4.redis分片
什么是分片?
使用redis集群时,我们会将存储的数据分散到多台redis实例(机器)上,这就称为分片。简言之,每个redis实例都被认为是整个数据的一个分片
如何找到给定key的分片?(如何知道这个key在哪台redis实例上)
redis内部提供的哈希槽算法CRC16(key) mode 16384
5.哈希槽+分片的优势
方便集群节点的扩容和缩容
6.slot槽位映射(redis分布式存储)的3种解决方案
(1)哈希取余分区
优点:简单粗暴,直接有效,使用hash算法让固定的一部分请求落到同一个redis实例上,这样每台redis服务器固定处理一部分请求,起到负载均衡+分而治之的作用
缺点:扩容和缩容相当麻烦,当redis节点数量变更后,映射关系全部需要重新计算
(2)一致性哈希算法分区
算法构建一致性哈希环>
redis服务器ip节点映射
key的落键规则
一致性哈希算法分片的优缺点
优点:加入或删除节点,只会影响哈希环中顺时针方向的相邻节点,对其他节点无影响
缺点:数据的分布和节点的位置有关,因为这些节点不是均匀分布在哈希环上的,所以数据在进行存储时达不到均匀分部的效果(存在数据倾斜问题)
(3)哈希槽分区
7.redis集群不保证数据的强一致性
redis集群不保证数据的强一致性,这意味着在特定的条件下,redis集群可能会丢掉一些被系统收到的写命令