在Redis的分片集群模式中,使用哈希槽的方式来进行数据分片。Redis集群有16384个哈希槽,每个槽都有一个编号(0~16383),集群的每个节点可以负责多个hash槽,客户端访问数据时,每个key通过CRC16校验后对16384取模来决定放置哪个槽。
CRC16(循环冗余校验码)算法基于多项式除法,将输入数据按位进行多项式除法运算,最后得到一个16位的校验码、CRC16算法的计算过程包括以下几个步骤:
1.初始化一个16位的寄存器为全1;
2.将输入数据的第一个字节与16位寄存器的低8位进行异或操作,结果作为新的16位寄存器的值;
3.将16位寄存器的高8位和低8位分別右移一位,丢弃掉最低位,即寄存器右移一位;
4.如果输入数据还没有处理完,转到第2步继续处理下一个字节;
5.如果输入数据已经处理完,将16位寄存器的值取反,得到CRC16校验码。