2019独角兽企业重金招聘Python工程师标准>>>

一、自定义轮询分片

按照上图所示,自己写一段逻辑,根据客户端请求循环写入不同Redis服务器

优点:

  • 理解简单
  • 数据分布平均

缺点:

  • 如果增加redis内存数据库服务器,需要改代码,需要发布代码,很麻烦,有风险
  • 数据迁移量较多

二、哈希取余分片

哈希取余就是一种特殊的自定义分片方式

优点:这里介绍的三种方式最差的

缺点:

  • 如果增加redis内存数据库服务器,需要改代码,需要发布代码,很麻烦,有风险
  • 数据迁移量多,理论是old/new,new = old+increase
  • 数据倾斜,从上图中可以看出最左侧的redis1服务器上存放的数据最多,最右侧的redis4服务器存放最少,如果数据都是几十亿的级别,那么倾斜就相当严重,单台服务器压力会过载

三、哈希一致性分片

它是Jedis采用的分片方式,并提供了JedisShardInfo、JedisPoolConfig、ShardedJedisPool、ShardedJedis 相关API做成redis连接池,分片逻辑对程序员透明

用图来直观了解一下哈希一致性的分片算法,看到下面的图不要害怕,根据后面的文字描述搭配着看

代表真实的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服务器虚拟一台服务器,且画的最理想哈希结果,最终每台服务器存放两个数据。

转载于:https://my.oschina.net/u/3049601/blog/1788835

哈希一致性、哈希取余、自定义轮询分片的比较相关推荐

  1. 哈希表除留取余法的桶个数为什么是质数

    可先科普下质数的概念:质数,也就是素数,就是指一个大于1的自然数,约数(因数)只有1和它自己,否则叫合数. 除留取余,就是哈希函数将关键字被某个不大于哈希表长m的数p除后所得余数为哈希地址.这是最常用 ...

  2. 先来先服务算法代码_一致性哈希算法编写

    今天我想先给大家科普下一致性哈希算法这块,因为我下一篇文章关于缓存的高可用需要用到这个,但是又不能直接在里面写太多的代码以及关于一致性hash原理的解读,这样会失去对于缓存高可用的理解而且会造成文章很 ...

  3. 一致性哈希算法 mysql_一致性哈希算法,在分布式开发中你必须会写,来看完整代码...

    今天我想先给大家科普下一致性哈希算法这块,因为我下一篇文章关于缓存的高可用需要用到这个,但是又不能直接在里面写太多的代码以及关于一致性hash原理的解读,这样会失去对于缓存高可用的理解而且会造成文章很 ...

  4. Redis~集群(分布理论、一致性哈希分区、虚拟槽分区、节点握手、集群通信、集群伸缩、请求路由、故障转移、集群维护)

    文章目录 分布理论 集群的分布式存储 简单哈希 一致性哈希分区 虚拟槽分区 Redis集群功能限制 节点握手 分配槽 集群通信 Gossip消息 集群伸缩 集群扩容 集群收缩 请求路由 MOVED重定 ...

  5. Redis数据分布一致性哈希

    一致性哈希 一致性哈希的原理: 把所有的哈希值空间组织成一个虚拟的圆环(哈希环),整个空间按顺时针方向组织.因为是环形空间,0 和2^32-1 是重叠的. 假设我们有四台机器要哈希环来实现映射(分布数 ...

  6. 【另类见解】一致性哈希就能解决分库分表问题了?

    " 开局一问:分库分表行为中,一致性哈希到底用处大不大? 装B脑图 现在是大数据的时代,其中一个体现就是数据量非常庞大.当然大数据的概念绝非是数据量就可以定义的,我自己给大数据下的定义是:无 ...

  7. memcached一致性哈希及php客户端实现

    memcached分布式算法 memcached的分布式是依靠客户端的算法来实现,假设键名为$key,服务器数量为N,常规的实现方式有两种: 取模哈希 crc32($key)%N,通过这个算法将键名映 ...

  8. 哈希函数与一致性哈希

    什么是 Hash Hash(哈希),又称"散列". 散列(hash)英文原意是"混杂"."拼凑"."重新表述"的意思. ...

  9. 分布式理论:CAP、BASE | 分布式存储与一致性哈希

    文章目录 分布式理论 CAP定理 BASE理论 分布式存储与一致性哈希 简单哈希 一致性哈希 虚拟节点 分布式理论 CAP定理 一致性(Consistency): 在分布式系统中的所有数据副本,在同一 ...

最新文章

  1. Microsoft Web 平台安装程序 (Web PI) Microsoft Web Platform Installer
  2. 国内技术原创氛围为什么那么差?记EAWorld(普元)是如何靠“借鉴”产出原创文章的!
  3. qa session of management of technology
  4. 交换机配置软件_如何配置远程登陆交换机?最简单的解释方式,一看就懂
  5. 论文阅读计划2(Deep Joint Rain Detection and Removal from a Single Image)
  6. 【UIKit】UITableView.02
  7. 什么是声明式事务控制
  8. QQ for Linux下载、安装、运行、卸载
  9. SAP HANA企业级培训系列课程第一部分
  10. 前端技术周刊 2018-12-03:DOM
  11. 【转】Linux之printf命令
  12. git 列出两个 commit 之间变更的文件列表
  13. Kettle下载安装pdi-ce-7.1.0.0-12
  14. 如何选出好用的仓库库存管理系统软件?看文章就知道了
  15. Kindle Touch 5.3.7上手使用指南
  16. MyEclipse链接SQLSERVER数据库时18456的问题
  17. Cortana小娜失败背后,微软的傲慢与偏见
  18. oracle 信用检查,Oracle EBS 信用(Credit)额度(1)
  19. 字符串算法之KMP(字符串匹配)
  20. fcpx:火焰特效坍塌爆炸特效高清视频素材Vfx-Starter-Pack

热门文章

  1. 用不惯VMware?试试这款更轻量级的虚拟机!
  2. 面试官:给我一个避免消息重复消费的解决方案?
  3. IntelliJ IDEA 小技巧: Stream Trace 功能!
  4. 苹果开源代码中惊现“wechat”,老外注释的吐槽亮了!
  5. 面试官三连问:你这个数据量多大?分库分表怎么做?用的哪个组件?
  6. 最强 JDK15 安装与讲解,有点想升级,终于要废弃偏向锁了!
  7. Coggle加速计划:解决数据下载烦恼!
  8. 《动手学数据分析》开源教程完整发布!
  9. 组合特征(四)linearsvm-tfidf(word)+lr-tfidf(article)
  10. 研究生论文“盲审”“查重”再加码!毕业或将变的更加困难