码迷,mamicode.com
首页 > 编程语言 > 详细

memcached的分布式算法

时间:2015-04-22 15:59:11      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:选择服务器   命中率   客户端   程序   影响   

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

memcached的分布式算法

标签:选择服务器   命中率   客户端   程序   影响   

原文地址:http://877763363.blog.51cto.com/1200927/1636841

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!