zoukankan      html  css  js  c++  java
  • redis一致性hash算法理解

    一般算法:

      对对象先hash然后对redis数量取模,如果结果是0就存在0的节点上。

      1、2同上,假设有0-3四个redis节点、20个数据:

      

    进行取模后分布如下:

    现在因为压力过大需要扩容,增加一台redis4、第五个节点:

    现在只有4个节点还能够命中。命中率是:4/20 = 20%,命中率极其低下。(redis肯定是不会这样用的)

    二、redis使用的consistent hashing(一致性hash算法)

      1、环形hash空间:

    把对象映射到0-2的32次幂减1的空间里。

    现在假设有4个对象:object1-object4,将四个对象hash后映射到环形空间中:

    接下来把chche映射到hash空间(基本思想就是讲对象和cache都映射到同一hash数值空间中,并且使用相同的hash算法,可以使用cache的ip地址或者其他因子),假设现在有三个cache:

    每个key顺时针往下走,找到的第一个cache节点就是存储位置:

    现在移除一个cacheB节点、这时候key4将找不到cache,key4继续使用一致性hash算法运算后算出最新的cacheC,以后存储与读取都将在cacheC上:

    移除节点后的影响范围在该节点逆时针计算到遇到的第一个cache节点之间的数据节点。

    现在看一下增加一个节点:

    影响范围为:添加节点逆时针遇到的第一个cache节点之间的数据节点。(未完待续)

    文中图为慕课网geely老师的电商平台课程视频中的图,知识点很多,讲的非常好,课程链接

  • 相关阅读:
    java集合:ArrayList(1)
    java虚拟机:堆内存
    计算机三种编码与加减运算
    java虚拟机:程序计数器
    java虚拟机:JIT编译器
    java虚拟机:运行时常量池
    java虚拟机:方法区
    java虚拟机:本地方法栈
    java虚拟机:class文件结构
    linux安装mysql
  • 原文地址:https://www.cnblogs.com/kenwar/p/9264856.html
Copyright © 2011-2022 走看看