memcache的分布式
memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。服务器端仅包括内存存储功能,其实现非常简单。至于memcached的分布式,则是完全由客户端程序库实现的。这种分布式是memcached的最大特点。
memcache分布式算法
1. 余数分散法,就是“根据服务器台数的余数进行分散”。 求得键的整数哈希值,再除以服务器台数,根据其余数来选择服务器。
在php客户端中,默认采用该算法,也可以在ini中设置Memcached::OPT_DISTRIBUTION=Memcached::DISTRIBUTION_MODULA。
余数计算的方法简单,数据的分散性也相当优秀,但也有其缺点。 那就是当添加或移除服务器时,缓存重组的代价相当巨大。 添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器, 从而影响缓存的命中率。为了在解决这个问题,实现了另一种分布式算法:hash一致性算法。
2.hash一致性算法(Consistent Hashing)
Consistent Hashing如下所示:首先求出memcached服务器(节点)的哈希值, 并将其配置到0~232的圆(continuum)上。 然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。 如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上,如下图。在php客户端中在ini中设置Memcached::OPT_DISTRIBUTION=Memcached::DISTRIBUTION_CONSISTENT
具体的设置:
<?php
ini_set(‘memcache.hash_strategy‘, "consistent");
phpinfo();
?>
consistent:哈希一致性算法。。
ini_set(‘memcache.hash_strategy‘, "standard");
standard取余算法
文件:
/etc/php.d/memcache.ini
本文出自 “老蔡” 博客,请务必保留此出处http://877763363.blog.51cto.com/1200927/1636841
原文地址:http://877763363.blog.51cto.com/1200927/1636841