memcache和memcached
一:Memcached、memcached、memcache。
其中首字母大写的Memcached,指的是Memcached服务器,就是独立运行Memcached的后台服务器,用于存储数据的“数据库”。
而memcached和memcache指的是Memcached的客户端,就是通过memcached或memcache来访问Memcached服务器。
二:PECL里有两个memcached的模块,memcache和memcached,目前大部分PHP环境里使用的是memcache版本,这个版本释出的比较早,是一个原生版本,与之对应的memcached版本则是建立在libmemcached的基础上,所以说memcached版本的功能更全一些。
先虚构一个问题,假设counter初始值是一个整数,不使用increment方法,通过get/set完成每次加一。
在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操作会失败,至于如何继续操作,就看你自
己了。
三:memcached相当memcache来说版本更新,
1.Memcache是原生实现的,支持OO和非OO两套接口并存。而memcached是使用libmemcached,只支持OO接口。
2.memcached还有个非常称赞的地方,就是flag不是在操作的时候设置了,而是有了一个统一的setOption()。Memcached实现了更多的memcached协议。
3.memcached支持Binary Protocol,而memcache不支持。这意味着memcached会有更高的性能。不过memcached目前还不支持长连接。
4.php的memcached与Memcache两个扩展都支持一致性hash算法,不过设置方法不太一样:
memcache
修改php.ini添加:
- [
Memcache
] - Memcache
.
allow_failover
=1
- ……
- ……
- Memcache
.
hash_strategy
=consistent
- Memcache
.
hash_function
=
crc32 - ……
- ……
或在php中使用ini_set方法:
- Ini_set
(‘
memcache
.
hash_strategy
','consistent
'); - Ini_set(‘memcache.hash_function'
,
'crc32'
);
memcached
- $mem = new memcached ();
- $mem
->
setOption
(
Memcached
::
OPT_DISTRIBUTION
,
Memcached
::
DISTRIBUTION_CONSISTENT
); - $mem
->
setOption
(
Memcached
::
OPT_LIBKETAMA_COMPATIBLE
,
true
);
或者:
Memcached::HASH_CRC);
Memcached::DISTRIBUTION_CONSISTENT);
四:memcache不支持存储object类型的数据。而memcached支持。
memcache和memcached的更多相关文章
- memcache与memcached的区别
其实到底说成什么无所谓,只要你真正理解和知道使用就可以了!但是介于有和我一样学习时遇到的这个疑惑,在此分享下其中的缘由: Memcache是一个软件 Memcache是一个自由和开放源代码.高性能.分 ...
- memcache与memcached介绍及安装配置
也许大家一看到Memcache和Memcached会有点晕,这两者有什么关系又有什么区别呢,下面先给大家说下Memcached,Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应 ...
- memcache与memcached扩展的区别
一.服务端 之前理解错误了.服务端只有一个memcache,一般把服务端称作memcached(带d),是因为守护进程的名称就是叫做memcached(一个这样的执行程序文件). 编写的语言:c语言 ...
- memcache、memcached、groupcache的区别
对PHP语言来说,PHP使用memcache有两个模块,分别叫memcache和memcached,他们的区别看下表: 参考:http://hi.baidu.com/tony_wd/item/605e ...
- 谈memcache和memcached的区别
用了段时间的memcache和memcached总结下认识,看很多人在用cache的时候,刚刚都没有搞清楚memcache 和 memcached的区别,还有就是使用的时候基本都是 get/set ...
- PHP与memcache和memcached以及安装使用
老规则,在作者寒冰讲之前我们要来明确memcache与memcached这两个东西到底是什么? 说法一: 两个不同版本的php的memcached的客户端 new memcache是pecl扩展库版本 ...
- php模块memcache和memcached区别分析
zm总结:尽量使用memcached就好了 1.目前大多数php环境里使用的都是不带d的memcache版本,这个版本出的比较早,是一个原生版本,完全在php框架内开发的.与之对应的带d的memcac ...
- memcache和memcached之间的区别和联系
memcache和memcached区别: Memcache是什么?Memcache是一个自由和开放源代码.高性能.分配的内存对象缓存系统.用于加速动态web应用程序,减轻数据库负载.它可以应对任意多 ...
- 【Linux】memcache和memcached的自动安装
赶时间所以写一个简单的一个脚本,没有优化,想优化的可以学习下shell,自己优化下. 且行且珍惜,源码包+脚本领取处 链接:https://pan.baidu.com/s/1wIFR1wY-luDKs ...
- php session保存到memcache或者memcached中
本教程叫你如何将php 的session存储在 memcached中,参考了好多网页,发现错误百出,最后自己还是测试成功了,现在将结果结果分享. 1-)系统环境 : elastix2.4 (cento ...
随机推荐
- C++工厂方法模式
class IFactoryBase { public: IFactoryBase(void); virtual ~IFactoryBase(void); public: virtual IProdu ...
- UVA 10254 - The Priest Mathematician (dp | 汉诺塔 | 找规律 | 大数)
本文出自 http://blog.csdn.net/shuangde800 题目点击打开链接 题意: 汉诺塔游戏请看 百度百科 正常的汉诺塔游戏是只有3个柱子,并且如果有n个圆盘,至少需要2^n- ...
- MongoDB-启动的时候出现了问题
之前MongoDB启动的时候是正常的,不知道后来启动报错了,就把粘贴出来查询了.最后才知道是由于自己不正常的关闭导致的这个情况. --摘录:MongoDB非正常关闭后修复记录 mongod没有后台执行 ...
- 随机数(random)
在测试你的程序是否超时时,可以随机生成一组大数据,进行一下测试. 当然如果你考场上一道题直接读不懂不会做的时候,可以random一下,拼一下RP嘛.2333. #include<cstdio&g ...
- poj 1364
http://poj.org/problem?id=1364 #include<cstdio> #include<cstring> #include<algorithm& ...
- RR 和RC 幻读问题
<pre name="code" class="html">显然 RR 支持 gap lock(next-key lock),而RC则没有gap l ...
- 【HDOJ】2571 命运
DP. /* 2571 */ #include <cstdio> #include <cstring> #include <cstdlib> #define MAX ...
- Codeforces Round #312 (Div. 2) B.Amr and The Large Array
Amr has got a large array of size n. Amr doesn't like large arrays so he intends to make it smaller. ...
- 《Ruby语言入门教程v1.0》学习笔记-03
10.09 第七章 7.1 模块 Ruby标准包里的 Math 模块提供了许多方法,比如:求平方根 sqrt ,使用的时候要这么写:模块名.方法名(参数).如:Math.sqrt( a*5+b ) M ...
- css+div 布局遇到的小常识
/根目录../上层目录举例如下: 在photo.css文件中写入: div.ls{ background:url(../photo/framels.jpg) no-repeat left; }div. ...