1、性能测试:
redis-benchmark 命令
它是测试redis性能工具,通过多个命令实现
结论:单节点比集群的性能要快
2、集群原理
2.1哈希槽
redis集群(cluster)并没有选用上面的一致性哈希,面是采用了哈希槽的这种概念,主要原因就是一致性哈希算法对于数据分布、节点位置的控制并不是很友好。
首先哈希槽其实是两个概念:
1、哈希算法:redis cluster的hash算法不是简单的hash(),而是crc16算法,一种校验算法。
2、槽位的概念,空间分配的规则。
一定要注意,对于槽位的转移和分派,redis集群是不会自动进行的,而是需要人式配置,所以redis集群的高可用是依赖于节点的主从复制与主从音的自动故障转移。
2.2、16384个slots(槽位)
redis cluster没有单机的那种16个数据库(0-15)的概念,而是分成了16384个slots槽位,每个节点负责其中一部分槽位,槽位的信息存储于每个节点中。
2.3、槽位定位算法
redis cluster默认会对key值使用CRC16算法进行hash得到一个整数值,然后用这个整数值对16384进行取模来得到具体的槽位,槽位计算公式:hash_slot = CRC16(key) mod 16384
2.4、补充:为什么是16384个槽

总结:
1、消息大小考虑:尽管crc16能得到65535个值,但redis选择16384个slot,是因为16384的消息只占用了2k,而65535则需要8k。
2、集群规模设计考虑:集群设计最多支持1000个分片,16384是相对比较好的选择,需要保证在最大集群规模下,slot均匀分布场景下,每个分片平均分到的slot不至于太小。
需要注意2个问题:
1、为什么要传全量的slot状态?
因为分布式场景,基于状态的设计更合理,状态的传播具有幂等性
2、为什么不考虑压缩?
集群规模较小的场景下,每个分片负责大量的slot,很难压缩。

如果本文对你有帮助的话,欢迎点赞&在看&转发,这对我继续分享&创作优质文章非常重要。感谢🙏🏻







