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老师的电商平台课程视频中的图,知识点很多,讲的非常好,课程链接

  • 相关阅读:
    优化网站性能之数据库架构篇
    使用 P3P 规范让 IE 跨域接受第三方 cookie
    使用 GitHub / GitLab 的 Webhooks 进行网站自动化部署
    将代码库从 SVN 迁移至 Git 并保留所有 commit 记录
    如何高效利用GitHub
    Mysql bin-log日志文件处理
    man手册页
    glibc/libc/blib区别
    列式数据库的简单分析
    Linux中如何设置服务自启动?
  • 原文地址:https://www.cnblogs.com/kenwar/p/9264856.html
Copyright © 2011-2022 走看看