按照上图所示,本身写一段逻辑,根据客户端请求循环写入不一样Redis服务器程序员
优势:redis
缺点:算法
哈希取余就是一种特殊的自定义分片方式数据库
优势:这里介绍的三种方式最差的服务器
缺点:spa
它是Jedis采用的分片方式,并提供了JedisShardInfo、JedisPoolConfig、ShardedJedisPool、ShardedJedis 相关API作成redis链接池,分片逻辑对程序员透明ip
用图来直观了解一下哈希一致性的分片算法,看到下面的图不要惧怕,根据后面的文字描述搭配着看内存
表明真实的redis服务器循环
表明虚拟的redis服务器,虚拟服务器隶属于真实服务器,好比虚拟2服务器须要存放的数据被真实的存放到redis2服务器上请求
表明数据
说明:
1.图中最大的圆是由2^32个点组成的圆,每一个点是1到2^32中的一个数
算法:
1.jedis根据redis服务器的ip+port+其余输入信息计算出一个哈希值,并将该哈希值映射到圆上
2.jedis根据key计算出一个哈希值,并将该哈希值映射到圆上
3.jedis根据key在圆上的位置顺时针找第一个redis服务器哈希值映射的点,该点对于的服务器就是key-value存储的服务器
4.若是只存在redis服务器的点,数据倾斜仍是会常常发生,为了解决这一问题,jedis根据真是服务器的信息虚拟出n*1000个虚拟服务器,将整个圆分段更多,数据(key-value)存放便更均匀,解决数据倾斜的问题,其中n是真实redis服务器的台数
图中无法画出4000个虚拟服务器,只是给每一台真实redis服务器虚拟一台服务器,且画的最理想哈希结果,最终每台服务器存放两个数据。