对于redis、memcached这些分布式缓存系统,需要将数据均匀的分布到缓存服务器集群的不同机器上,就需要使用对缓存的数据的key做hash值计算, 然后在将hash值除以服务器节点的数量取模计算出数据需要落到那台服务器节点上。这种算法很简单,也可以实现数据的均匀分布, 但是,增加或者减少数据节点的时候会导致所有缓存数据失效。
例如,有三台Redis,对于每次的访问都可以通过计算hash来求得hash值。如公式 h=hash(key)%3,我们把Redis编号设置成0,1,2来保存对应hash计算出来的值,h的值等于Redis对应的编号。
例如10条数据,3个节点,如果按照取模的方式,那就是h=hash(key)%4
node a: 0,3,6,9
node b: 1,4,7
node