zoukankan      html  css  js  c++  java
  • 【转】memcached分布式部署

    FROM : http://www.tuicool.com/articles/777nE3j

    memcache和memcached两者使用起来几乎一模一样。

    $mem = new Memcache;
    $mem->addServer($memcachehost, '11211'); 
    $mem->addServer($memcachehost, '11212');
    $mem->set('hx','9enjoy');
    echo $mem->get('hx');
    $md = new Memcached;
    $servers = array(
    array($memcachehost, '11211'),
    array($memcachehost, '11212')
    );
    $md->addServers($servers);
    $md->set('hx','9enjoy');
    echo $md->get('hx');

    memcached的方法比memcache多不少,比如getMulti,getByKey,addServers等。

    memcached没有memcache的connect方法,目前也还不支持长连接。

    memcached 支持 Binary Protocol,而 memcache 不支持,意味着 memcached 会有更高的性能。

    Memcache是原生实现的,支持OO和非OO两套接口并存,memcached是使用libmemcached,只支持OO接口。

    memcached服务端是集中式的缓存系统,分布式实现方法是由客户端决定的。

    memcached的分布算法一般有两种选择:

    1、根据hash(key)的结果,模连接数的余数决定存储到哪个节点,也就是hash(key)% sessions.size(),这个算法简单快速,表现良好。然而这个算法有个缺点,就是在memcached节点增加或者删除的时候,原有的缓存数据将大规模失效,命中率大受影响,如果节点数多,缓存数据多,重建缓存的代价太高,因此有了第二个算法。

    2、Consistent Hashing,一致性哈希算法,他的查找节点过程如下:

    首先求出memcached服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过2的32次方后仍然找不到服务器,就会保存到第一台memcached服务器上。

    memcache在没有任何配置的情况下,是使用第一种方法。

    memcached要实现第一种方法,使用(未确认):

    $md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);

    <?php
    $m = new Memcached();
    $m->addServers(array(
      array('127.0.0.1',11211,90),
      array('127.0.0.1',11212,10),
    ));
    $m->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC); 
    $m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);
    for($i=0;$i<100;$i++){
      $key = "k_$i";  
      $m->set($key,'v_'.$key);
    }
    ?>

    第二种一致性哈希算法:

    memcache在php.ini中加:

    Memcache.hash_strategy =consistent

    Memcache.hash_function =crc32

    memcached在程序中加(未确认):

    $md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC); 

    $md->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);  

    或(下面的方法测试可行-moqiang02)

    $md->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);

    $md->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true); 

    可通过Memcached::getAllKeys或Memcached::getServerByKey(尝试未成功)来查看缓存分布状况。

    通过key获取value:

    <?php
    $m = new Memcached();
    $m->addServers(array(
      array('127.0.0.1',11211,90),
      array('127.0.0.1',11212,10),
    ));
    $m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);
    echo $m->get('k_70');
    ?>
  • 相关阅读:
    (十三)网络html查看器
    (十二)handler消息处理机制
    (十一)ANR产生原理
    (十)android 中数据存储与访问——使用SharedPreferences保存数据
    (九)android 中数据存储与访问——保存文件到手机内存
    (八)activity的生命周期
    (七)android 通知对话框,并且监听了返回键,当按下返回键也会创建一个对话框
    (六)采用HTML创建UI
    (五)使用代码创建UI
    (六)代码编写UI
  • 原文地址:https://www.cnblogs.com/Athrun/p/4570987.html
Copyright © 2011-2022 走看看