1 Redis分布式算法原理

1.1 传统分布式算法

直接 hash 取模到对应节点

  • 4 个节点,20 个数据。
    Redis分布式算法原理-Hash一致性算法_Redis

蓝色表与4个节点时相同槽

  • 5 个节点,20 个数据Redis分布式算法原理-Hash一致性算法_Redis_02

结论

  • redis0只有20命中
  • redis1只有1命中
  • redis2只有2命中
  • redis3只有3命中

命中率是: 4/20= 20%

1.2 Consistent hashing一致性算法原理

  • 环形 hash 空间:按照常用的 hash 算法来将对应的 key 哈希到一个具有 232 个桶的空间,即(0-232-1)的数字空间中,现在我们将这些数字头尾相连,想象成一个闭合的环形
  • 把数据通过一定的 hash 算法映射到环上
  • 将机器通过一定的 hash 算法映射到环上
  • 节点按顺时针转动,遇到的第一个机器,就把数据放在该机器上

«Consistent hashing and random trees» 论文提出该算法。
Redis分布式算法原理-Hash一致性算法_Redis_03
Redis分布式算法原理-Hash一致性算法_Redis_04
在移除 or 添加一个 cache 时,他能够尽可能小的改变已经存在 key 映射关系
Redis分布式算法原理-Hash一致性算法_Redis_05

  • 删除CacheB后,橙色区为被影响范围Redis分布式算法原理-Hash一致性算法_Redis_06
    Redis分布式算法原理-Hash一致性算法_Redis_07
  • 也许心中的分布式这样的Redis分布式算法原理-Hash一致性算法_Redis_08
  • 但实际会这样拥挤-即倾斜性Redis分布式算法原理-Hash一致性算法_Redis_09

1.3 Hash倾斜性

Redis分布式算法原理-Hash一致性算法_Redis_10

  • 为解决此类事件,引入了虚拟节点
    Redis分布式算法原理-Hash一致性算法_Redis_11
    Redis分布式算法原理-Hash一致性算法_Redis_12
    Redis分布式算法原理-Hash一致性算法_Redis_13
2 Redis分布式服务端及客户端启动
  • 修改两个redis的配置文件redis.conf
  • 修改端口- -个为6379,-个为6380
  • 通过配置文件启动redis- server
  • redis-server r e d i s [ 0 − 1 ] 的 {redis[0-1]}的 redis[0−1]的{redis.conf}

封装分布式Shared Redis API

集群和分布式

  • 分布式:不同的业务模块拆分到不同的机器上,解决高并发的问题。 工作形态 redis服务器各工作方式不同一般称为Redis分布式
  • 集群:同一个业务部署在多台机器上,提高系统可用性 是物理形态,一般称Tomcat集群

集群可能运行着一个或多个分布式系统,也可能根本没有运行分布式系统;分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。

你前台页面有10个用户,分别发送了1个请求,那么如果不是集群的话,那这10个请求需要并行在一台机器上处理,如果每个请求都是1秒钟,那么就会有一个人等待10秒钟,有一个人等待9秒钟,以此类推;那么现在在集群环境下,10个任务并分发到10台机器同时进行,那么每个人的等待时间都还是1秒钟;
当然,你说的浪费确实是,如果系统的并发不是很高,只有一台或者两台机器就能处理的话,那确实是有很大的浪费