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

最新文章

  1. SQL SERVER 2008:内部查询处理器错误: 查询处理器在执行过程中遇到意外错误
  2. iOS真机调试
  3. hdu 4770(枚举 + dfs爆搜)
  4. stl迭代器原理
  5. git从入门到精通
  6. SVN与TortoiseSVN实战:属性的奇技淫巧(一)
  7. ActiveMQ之Queue
  8. Trafic
  9. response的contentType 几种类型
  10. PAT1027
  11. springboot启动流程
  12. hbase 概念
  13. 使用Expression进行动态排序分页
  14. SpringMVC(三十) 实例:SpringMVC_RESTRUL_CRUD_显示所有员工信息
  15. 深入理解css3中 nth-child 和 nth-of-type 的区别
  16. Linux基础三(软件安装管理)
  17. 【BZOJ 4832 】 4832: [Lydsy2017年4月月赛]抵制克苏恩 (期望DP)
  18. 利用VisualStudio单元测试框架举一个简单的单元测试例子
  19. yii 关于如何改变默认访问的控制器(site)
  20. eclipse 在线安装 properties 插件

热门文章

  1. C# 读取Text文本,写入Text文本
  2. .net core MVC Filters 过滤器介绍
  3. Qt信号与槽 如何写2个类,一个发送信号,一个接收并处理
  4. Android 学习笔记 文本文件的读写操作
  5. string类------新标准c++程序设计
  6. React + Dva + Antd + Umi 概况
  7. python自带的排列组合函数
  8. shell-003:用for循环统计内存使用量
  9. In linux shell, How to cp/rm files by time?
  10. WIN7中 HttpListener 拒绝访问 异常解决 C#