分片后,数据存在了不同的redis上,那么获取数据的时候,它怎么知道去哪台redis服务器找?

来源:7-4 Coding+集群分布式区别讲解

慕粉1920568985

2018-06-15

分片后,数据存在了不同的redis上,那么获取数据的时候,它怎么知道去哪台redis服务器找?

写回答

3回答

qq_诶姆_0

2018-07-10

//img.mukewang.com/szimg/5b4458df00015e6006730510.jpg

之前我也不太清楚,后来又看老师讲的一遍,有查了一下资料,我的理解是,把我们要存的数据{key,value},将key进行hash计算,然后分布在圆环上的一个位置上,然后根据顺时针找到最近的redis,把数据存到这里面。以后我们想getKey的时候,同样对该key进行hash计算,然后顺时针找到redis,这样就找到我们的数据了。我是这么理解的,如有不对的地方,还请其他人改正。

4
0

小麻雀呀

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次获取,都命中了

//img.mukewang.com/szimg/5c93c638000105b507680479.jpg

1
0

about_blank

2018-06-16

详情看下 老师讲解的分布式一致性hash 的原理 同学

0
0

Java企业级电商项目架构 Tomcat集群与Redis分布式

Tomcat集群+Redis分布式+代码重构+源码原理解析

2685 学习 · 947 问题

查看课程