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');
?>

【转】memcached分布式部署的更多相关文章

  1. memcached分布式部署

    memcache和memcached两者使用起来几乎一模一样. $mem = new Memcache; $mem->addServer($memcachehost, '11211'); $me ...

  2. Memcached常规应用与分布式部署方案

    1.Memcached常规应用 $mc = new Memcache(); $mc->conncet('127.0.0.1', 11211); $sql = sprintf("SELE ...

  3. 项目分布式部署那些事(2):基于OCS(Memcached)的Session共享方案

    在不久之前发布了一篇"项目分布式部署那些事(1):ONS消息队列.基于Redis的Session共享,开源共享",因为一些问题我们使用了阿里云的OCS,下面就来简单的介绍和分享下相 ...

  4. Memcache分布式部署方案

    基础环境 其实基于PHP扩展的Memcache客户端实际上早已经实现,而且非常稳定.先解释一些名词,Memcache是danga.com的一个开源项目,可以类比于MySQL这样的服务,而PHP扩展的M ...

  5. memcache分布式部署的原理分析

    下面本文章来给各位同学介绍memcache分布式部署的原理分析,希望此文章对你理解memcache分布式部署会有所帮助哦.   今天在封装memcache操作类库过程中,意识到一直以来对memcach ...

  6. CentOS7.2非HA分布式部署Openstack Pike版 (实验)

    部署环境 一.组网拓扑 二.设备配置 笔记本:联想L440处理器:i3-4000M 2.40GHz内存:12G虚拟机软件:VMware® Workstation 12 Pro(12.5.2 build ...

  7. 让memcached分布式

    memcached是应用最广的开源cache产品,它本身不提供分布式的解决方案,我猜想一方面它想尽量保持产品简单高效,另一方面cache的key-value的特性使得让memcached分布式起来比较 ...

  8. Memcached安装部署

    Memcached安装部署 发表回复 简述: Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供 ...

  9. Hadoop1 Centos伪分布式部署

    前言:       毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...

随机推荐

  1. 按行拆分文本文件与合并文本文件---I/O流---java

    背景 在进行自然语言处理的中文词性标注时   进行测试时由于测试数据文本行数较多  而且测试每次标注一行的用时稍长 如果一次将文件读进来测试机器运行时间要连续不能中断  而且 只能一台机器进行工作 于 ...

  2. 两种思想实现基于jquery的延时导航菜单,可做延时触发器!

    1. 函数式 html如下: <div class="box"> <ul class="clear-fix"> <li class ...

  3. strlen()和mb_strlen()

    换行需要用双引号,单引号只会输出字符. strlen()返回字符串所占的字节数,对于utf8编码的中文,一个汉字占三个字节. mb_strlen()返回字符个数,如果不写第二个参数,就会使用内部编码, ...

  4. 图的遍历 之 深搜dfs

    DFS 遍历 深度优先搜索是一个递归过程,有回退过程. 对一个无向连通图,在访问图中某一起始顶点u 后,由u 出发,访问它的某一邻接顶点v1:再从v1 出发,访问与v1 邻接但还没有访问过的顶点v2: ...

  5. [POJ1655]Balancing Act

    思路:DP求树的重心.对于每个结点$i$,$d_i=\displaystyle{\sum_{j\in s(i)}}d_j+1$.删去这个点能得到的最大子树大小即为$\max(\max\limits_{ ...

  6. URAL 1966 Cycling Roads 计算几何

    Cycling Roads 题目连接: http://acm.hust.edu.cn/vjudge/contest/123332#problem/F Description When Vova was ...

  7. URAL 1962 In Chinese Restaurant 数学

    In Chinese Restaurant 题目连接: http://acm.hust.edu.cn/vjudge/contest/123332#problem/B Description When ...

  8. Beyond Compare 4提示已经过了30天试用期,破解方式,亲测可用

    修改注册表 1)在搜索栏中输入 regedit ,打开注册表 2) 删除项目:计算机\HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compar ...

  9. windows servier2008+virtualenv下部署Flask (IIS+wfastcgi)

    由于业务只有一台windows server2008的服务器,一般的nginx+uwsgi的部署方式不行,以下记录部署过程,本文参考自:https://www.cnblogs.com/xiaolecn ...

  10. 关于eclipse的indigo版中文注释时字体太小的问题(转)

    eclipse目前最新版代号indigo, 在win7上使用时中文注释时字体太小的问题. 为什么会这样? 首先我们应该知道, 在win7系统中, font是有"显示"和" ...