• memcached和一致性hash算法


    1 一致性hash算法的一致性

    这里的一致性指的是该算法可以保持memcached和数据库中的数据的一致性。

    2 什么是一致性hash算法

    2.1 为什么需要一致性hash算法

    现在有大量的key value的数据需要分散的存储到不同的机器上的memcached中,如何根据key来分派机器。

    简单的方法直接对机器数目取模,比如有3台机器,首先对key求hash,假如hash分别是1,2,3,4,5,6,7,8,那么

    3,6    分派到第一台机器

    1,4,7分派到第二台机器

    2,5,8分派到第三台机器

    但是,假如加了一台机器,4台机器,那么就要对4取模了,

    4,8分派到第一台机器

    1,5分派到第二台机器

    2,6分派到第三台机器

    3,7分派到第四台机器

    这样,3本来是第三台机器,现在分到了第4台机器,那么原来的数据就失效了,第四台机器的数据需要去数据库中重新取。4、5、6、7、8同理。

    这样导致的问题就是原来的memcached缓存的数据大量失效,需要重新获取,成本很高。

    2.2 一致性hash算法怎么做

    对机器根据ip计算hash值,比如机器1是3,机器2是5,机器3是9。

    现在分派策略变成了,如果key的hash值大于9并且小于3,就分派给机器1,如果大于3小于5就分派给机器2,如果大于5小于9就分派给机器3。

    如果新加一台机器4,hash值是8,那么如果key大于5小于8就分派给机器4,大于8小于9就分配给机器3,其它的都不变。

    这样只是机器3上的memcached需要更新部分数据,其它原来的机器上的memcached和数据库中保持一致。

    hash不直接对N取模,而是根据将hash key空间分成多个段,段的断点为机器ip的hash值。某个请求的hash key落在某个段上面,然后将该请求分配给顺时针走遇到的第一个节点。

    2 memcached

    它是一个分布式的缓存,它通过客户端实现了分布式缓存,根据key将数据缓存到不同的机器上。

    客户端可以使用xmemcached、spymemcached等

    boolean set(final String key, final int exp, final Object value);

    可见,任何对象都可以存放在memcached中。

  • 相关阅读:
    返回顶部,跳到底部
    [Swift]LeetCode1068.
    [Swift]LeetCode1067. 范围内的数字计数 | Digit Count in Range
    [Swift]LeetCode1066. 校园自行车分配 II | Campus Bikes II
    [Swift]LeetCode1065. 字符串的索引对 | Index Pairs of a String
    [Swift]LeetCode1064. 不动点 | Fixed Point
    [Algorithm]扔杯问题
    CleanWipe:无需密码彻底卸载Symantec(赛门铁克)
    [Swift]获取UIColor的HSV/HSB值(Hue色相、S饱和度、B亮度)
    [Swift]LeetCode1050.合作至少三次的演员和导演 | Actors and Directors Who Cooperated At Least Three Times
  • 原文地址:https://www.cnblogs.com/hustdc/p/8909802.html
Copyright © 2020-2023  润新知