分片后,数据存在了不同的redis上,那么获取数据的时候,它怎么知道去哪台redis服务器找?
来源:7-4 Coding+集群分布式区别讲解
慕粉1920568985
2018-06-15
分片后,数据存在了不同的redis上,那么获取数据的时候,它怎么知道去哪台redis服务器找?
3回答
-
qq_诶姆_0
2018-07-10
之前我也不太清楚,后来又看老师讲的一遍,有查了一下资料,我的理解是,把我们要存的数据{key,value},将key进行hash计算,然后分布在圆环上的一个位置上,然后根据顺时针找到最近的redis,把数据存到这里面。以后我们想getKey的时候,同样对该key进行hash计算,然后顺时针找到redis,这样就找到我们的数据了。我是这么理解的,如有不对的地方,还请其他人改正。
40 -
小麻雀呀
2019-03-22
开启两台Redis服务,A:6379 B:6380
比如有1-10个值,需要存入Redis中
当set值的时候,有一部分在A里面,有一部分在B里面
A:1,3,4,5,9
B:2,6,7,8,10
当我进行get的时候,那么有个问题,比如我这次get 3的时候,但是却请求到B服务器,
那么肯定拿不到,这是不是Redis分布式命中问题?
ShardedJedis内部采用了一致性哈希算法,也就是环型hash
在创建连接池的时候,可以指定MurmurHash算法。有时候当节点很少的情况下,
会有Hash的倾斜性发生,所以会增加虚拟节点,源码是默认增加160*weight(权重,创建的时候可配,默认是1)
这种算法的命中率公式为:1-n/(n + m) * 100%
n = 现有的节点数量
m = 新增的节点数量
比方说,节点数量为2,虚拟节点默认增加160,命中率为98.7%,
如果设置weight为100的时候 那么,根据公式命中率为99.998%,可以说是100%了,这样大大增加了其命中率
我开了2台redis服务,权重为1,测试1000次获取,都命中了
10 -
about_blank
2018-06-16
详情看下 老师讲解的分布式一致性hash 的原理 同学
00
相似问题