memcache缓存是缓存数据库查询结果减轻数据库压力。这里不探讨memcache如何使用。
很多时候一台memcached服务器不能满足需求,就需要多台memcached服务器。但是用了多台服务器,程序怎么知道把数据存储到哪台服务器,又怎么知道去哪台服务器读取数据呢?
我在书上找到两种解决方案普通的hash分布和一致性的hash分布,贴出来跟大家一起分享一下。如果有更好的,赶紧贴出来,与大家一起分享一下。
普通的hash分布:
function hashKey($key){ $md5 = substr(md5($key), 0, 8); $seed = 31; $hash = 0; for($i = 0; $i < 8; $i++){ $hash = $hash * $seed + ord($md5{$i}); $i++; } return $hash & 0x7FFFFFFF; } $servers = array( array("host" => "192.168.1.101", "port" => 6397), array("host" => "192.168.1.102", "port" => 6397), ); $key = "dataKey"; $memcacheServer = $servers[hashKey($key) % 2]; print_r($memcacheServer);
在这里就输出了,我们想要的服务器了。然后在跟memcache去交互。
一致性的hash分布:
在memcache服务器不多的时候,普通的hash可以运作很好。但是在增加一台服务器,同一个key经过hash,就会出问题。我们原来的缓存,都找不到了。这时候,我们可以使用一致性的hash。