美文网首页
Memcache的hash策略及配置总结

Memcache的hash策略及配置总结

作者: RainingMan | 来源:发表于2017-06-29 17:52 被阅读0次

    原文链接: http://www.drupal001.com/2015/04/memcache/

    Memcach是web应用/Drupal应用性能提高的利器,近期在使用Memcache中,发现有很多小问题,因此作者特意总结了几个,放上来供大家参考使用。
    1. Memcache和Memcached的区别
    **这个是历史问题,但是,言而总之:名字长的更牛逼! **
    所以,推荐使用memcached。另外,memcached有很多新特性,包括getMulti/setMulti、支持存储object、支持count+1操作,都会比memcache的好用一些,可以试试,或许以后支持更多的操作,赶上redis。。
    Drupal大学上关于memcache的问答:http://../apachesolr_search/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

    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的算法也是比较推荐的,毕竟一致性算法存在一个均匀分布的问题(可能已经解决了。。)
    打完收工!

    相关文章

      网友评论

          本文标题:Memcache的hash策略及配置总结

          本文链接:https://www.haomeiwen.com/subject/rlhvcxtx.html