Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  php  >  正文 Drupal中如何配置及利用Memcache的hash策略

Drupal中如何配置及利用Memcache的hash策略

发布时间:2017-12-13   编辑:www.jquerycn.cn
jquery中文网为您提供Drupal中如何配置及利用Memcache的hash策略等资源,欢迎您收藏本站,我们将为您提供最新的Drupal中如何配置及利用Memcache的hash策略资源
memcache是一套分布式的高速缓存系统,在Drupal中我们可以利用Memcach提高Drupal应用性能,本文是我们总结的Memcache的hash策略及配置。

Memcach是web应用/Drupal应用性能提高的利器,近期在使用Memcache中,发现有很多小问题,因此作者特意总结了几个,放上来供大家参考使用。

1. Memcache和Memcached的区别

这个是历史问题,但是,言而总之:名字长的更牛逼!  

所以,推荐使用memcached。
另外,memcached有很多新特性,包括getMulti/setMulti、支持存储object、支持count 1操作,都会比memcache的好用一些,可以试试,或许以后支持更多的操作,赶上redis。。

Drupal大学上关于memcache的问答:http://../apachesolr_search/memcache


如下(摘自德问):

#Memcache
$m = new Memcache();
$m->addServer('localhost', 11211);
$v = $m->get('counter');
$m->set('counter', $v 1);
#由于get/set这两个动作无法作为一个原子来操作,所以当多个进程同时处理时,
#会出现丢失的可能,更让人恼火的是,你根本就不知道什么时候出现丢失。

#Memcached
$md = new Memcached();
$md->addServer('localhost', 11211);
$v = $md->get('counter', null, $token)
$md->cas($token, 'counter', $v 1);
#cas是Memcached版本里提供的功能,说白了就是一个乐观锁的功能,
#如果你把$token的值var_dump出来,就会发现$token其实就是一个版本号,
#如果通过get得到的$token版本号在cas的时候不对应,就说明已经有别的操作更新了,
#此时cas操作会失败,至于如何继续操作,就看你自己了

两者的区别如下,下面是Memcache的方法:

memcache
下面是memcached的方法:
memcached

2. Memcache的哈希策略

    常规的hash策略是取模,比如key=10, 有两台服务,就10%2=0,算出该值分布在第一台服务器上。
    那么缺点也很明显,比如服务器增加一台,之前的分布式策略全完蛋。

因此,业界需要更牛逼的算法~

一致性hash算法隆重登场!

简单说来,一致性hash算法就是先把服务器也通过某一个特征(如IP/MAC地址)hash一下,这样服务器会按照分布(可能不均匀)在一个范围,然后把key再hash一下,然后看key最近的下个服务器作为该key的存储bin。
这样,如果增加一台服务器,重新分配的key只是分布再新增的这个服务器和上一个最近的服务器之间的key,其余的都不变。

初步的服务器分布:

hash-1

增加服务器的分布:
hash-2

上面的描述的是白话,可能比较拗口,笔者文字水平有限,详情见下面的链接:

http://blogread.cn/it/article/5271
http://blog.csdn.net/kongqz/article/details/6695417

3. Memcache的hash策略配置

Memcache安装完成之后,可以设置哈希策略,memcache.hash_strategy。目前有standard模式和consistent模式。standard模式其实就是%,即取模。而consistent,就是hash的一致性算法。

在Memcache中,hash策略在PHP.ini文件中设置

[Memcache]
Memcache.allow_failover = 1
……
……
Memcache.hash_strategy =consistent
Memcache.hash_function =crc32

在Memcached中,hash策略在PHP的参数中设置:

mem = new memcached();
$mem->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);

 

4. 后记

因此正常情况下,推荐使用一致性哈希算法,但凡事无绝对,比如一个小的站点,memcache的服务几乎永不会增加,这是用常规的standard的算法也是比较推荐的,毕竟一致性算法存在一个均匀分布的问题(可能已经解决了。。)

您可能感兴趣的文章:
Drupal中如何配置及利用Memcache的hash策略
专家教你如何有效的学习Drupal - Drupal问答
Drupal的缓存技术应用-让你的网站飞起来
PHP如何操作Memcache缓存?
Drupal7中配置Memcache方法详解
强大的Drupal有什么缺陷与不足?
如何在Linux服务器端的安装Memcache
Drupal 7结合Apache Solr 4.7实现中文分词教程
PHP面试踩过的坑
yii中使用memcache的实例分享

[关闭]