1.分布式三个节点结构
使用多个节点对应数据生成的系统处理数据的读写工作,多个节点每个都处理了总数据量一部分数据—数据分片。
2.数据分片计算
大量数据生产即将发送给redis节点进行处理之前,必须计算完毕,某一条数据应该交给谁交给哪个节点去进行读写的工作,而且要考虑单调性。
单调性:存哪里了,就应该从哪去找数据
2.1hash取余
a、hash取余计算公式
可以实现一个简单的分片计算逻辑–hash取余可以完成,能够实现大量数据的切分计算
交给不同节点管理维护数据,并且保证了单调性,任何一条key-value如果存储在节点A,必定也能实现读取时找到节点A
java可以利用一个公式来完成hash取余算法的代码编写:
(key.hashCode()&Integer.MAX_VALUE)%n
key:表示redis要处理的key-value数据,key的取值范围就是字符串范围
key.hashCode():hashCode()方法,是Object类型的散列计算方法。可以将任意一个内存java
对象映射到对应的一个integer整数范围区间。并且,只要对象不变(equal),整数值不会发生变化的。但是可正可负。
key.hashCode()&Integer.MAX_VALUE:利用&做位的与运算,实现31位的保真运算,保证整数是正数。
保真运算:根据保真运算的1的位数,做N位保证,保证N位二进制和之前相同,其他的都是0。