memcached的环形算法-consistent hashing 算法

memcached一般两种算法,一种是取余算法,一种是环形算法。

取余算法本身存在一个缺陷是 扩展时候将会影响到所有的mem。客户端需要全部从数据库中读取数据,造成数据库瞬间压力过大。

 

而环形算法则只会影响到其中的一个客户端。

由于客户端是以key-value形式把数据存储到mem上。而此时hash算法把value映射到32位的key值上。32位key值意味着key是从0到2的31次幂。譬如你两台mem,则0到2的30次幂落在m1上,其余落在m2上。

 

假如现在要加入m3,则m1保持不变,可以将m2的一半分配给m3.这样只有m2一半的key对应的value需要重新从数据库中读取。实际上四分之一左右的数据需要重新读取。大大减少了数据库瞬间的压力。

你可能感兴趣的:(算法,memcached)