文档章节

php memcache与php memcached区别及相关问题

i
 iturtle
发布于 2014/11/14 13:15
字数 807
阅读 8
收藏 0


1. Php memcache的问题

1.1 分布式问题

php memcache默认会自动切换实例,所以有时取到老数据,并且value飘忽不定。

网友分享的问题:

这几天做某个产品的时候遇到一个小问题,现象比较诡异,产品用了两台分布式的memcached服务器。某一个计数器取回来的数偶尔会不对,最后定位在php memcache client的failover机制上面。

我们知道,在memcached分布式环境下,某一个key是通过hash计算,分配到某一个memcached上面的。

如果php.ini里面 memcache.allow_failover = 1的时候,在分布式环境下,某一台memcached出问题的话,会自动到其他的memcached尝试,就会出现上面的问题。所以要设置 allow_failover = 0 那么取不到时就直接返回失败而不会从其它mc上取,这样以避免网络异常或server端异常时,经常切换实例,会取到老数据。


1.2 高并发下稳定性问题

新浪微博提到的教训:

php memcache换成php memcached,在高并发下稳定下极大提高;

另外功能更多,出错码更精确。


Twitter的缓存经验

多层次Cache,减轻某些cache节点宕掉后的影响,读写都cache;

将memcached api统一换为libmemcached(方便多语言访问memcached,让分布式等各种规则都一致。)


1.3 1秒超时间隔没法修改问题

php memcache客户端有个1秒超时间隔没法修改问题:

bool Memcache::connect ( string $host [, int $port [, int $timeout ]] )

第三个参数本来可设置timeout,单位秒,但无法修改。

测试了以下三种修改timeout的方法都无效:

1.3.1. 用memcache api Memcache::setServerParams不能修改;

1.3.2. 改memcache 源代码vi php_memcache.h宏定义不能修改;

1.3.3. php.ini内这个配置:default_socket_timeout = 60对本timeout无效。


2. memcache和memcached对比

Php memcache这个老客户端在属性设置方面可设置的很少;

出错码粒度很粗,出错后难以定位;

而且功能欠缺一些:

There are primarily two clients used with PHP. One is the older, more widespread pecl/memcache and the other is the newer, less used, more feature rich pecl/memcached.

Both support the basics such as multiple servers, setting vaules, getting values, increment, decrement and getting stats.


Here are some more advanced features and information.

项目              pecl/memcache       pecl/memcached
First Release Date      2004-06-08      2009-01-29 (beta)
Actively Developed      Yes             Yes
External Dependency     None            libmemcached
Automatic Key Fixup1    Yes             No
Append/Prepend          No              Yes
Automatic Serialzation2 Yes             Yes
Binary Protocol         No              Optional
CAS                     No              Yes
Compression             Yes             Yes
Communication Timeout   Connect Only    Various Options
Consistent Hashing      Yes             Yes
Delayed Get             No              Yes
Multi-Get               Yes             Yes
Session Support         Yes             Yes
Set/Get to a specific server    No          Yes
Stores Numerics         Converted to Strings    Yes

注释:

1 pecl/memcache will convert an invalid key into a valid key for you. pecl/memcached will return false when trying to set/get a key that is not valid.

2 You do not have to serialize your objects or arrays before sending them to the set commands. Both clients will do


转载请注明出处:http://www.ttlsa.com/html/2467.html


© 著作权归作者所有

共有 人打赏支持
i
粉丝 0
博文 53
码字总数 13774
作品 0
广州
私信 提问
Memcached-1.4.4-14 For Win32 or Win64

注意:以下相关软件是以2015-03-23日能找到的最新的版本为基础提供的教程 一、下载并安装memcached服务器端软件 这个就好比mysql数据库,必须安装mysql服务器端软件。 1、下载服务端memcach...

lixiaokai2008
2015/03/23
0
0
php扩展memcached编译安装

memcache是一个开源、高性能对象缓存系统的项目名,作为服务端,它的守护进程名称是memcached。 官网:http://memcached.org PHP有两个memcache客户端:php memcache和php memcached。这两个...

hiwill
2016/06/15
121
0
关于memcache的一些知识

Mencached、memcached、memcache的区别: 区分开三种写法来帮你理解。Memcached、memcached、memcache。 其中首字母大写的Memcached,指的是Memcached服务器,就是独立运行Memcached的后台服...

kobe52099
06/26
0
0
php模块memcache和memcached区别分析

谈及php搭配memcached使用,已经是老生常谈的问题。但是有一些细节,不见得人人清楚。比如说php的模块memcache和memcached有什么区别等。下面我就简单介绍一下。 1.目前大多数php环境里使用的...

lixiaokai2008
2013/07/06
0
1
Windows7 x64在Wampserver上安装memcache

Windows7 x64在Wampserver上安装memcache 放假重装了一下系统,win7 x64的,而我使用的win下的开发环境也升级到了最新版,所集成的是php5.3.13,一切很顺利,但是在安装php的memcache扩展的时...

真座山雕
2012/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

高并发编程:解析HashMap

底层实现原理 在JDK1.8以前版本中,HashMap的实现是数组+链表,它的缺点是即使哈希函数选择的再好,也很难达到元素百分百均匀分布,而且当HashMap中有大量元素都存到同一个桶中时,这个桶会有...

小刀爱编程
9分钟前
0
0
程序员请不要假装很努力,因为结果不会陪你演戏

前言: 我一直相信这样一句话:真正的危机,来源于在正确的时间做不正确的事。没有在正确的时间,为下一步做出积累,这才是危机的根源。 比如,当你迈过了30岁这个坎,你的能力还局限于程序的...

Java干货分享
14分钟前
1
0
Fio随机读IOPS测试值可能偏大的原因分析

问题描述: 在使用fio进行虚拟机磁盘(Ceph的RBD,格式化为ext4文件系统)的IOPS测试时,发现randread比预估值高许多; 在使用相同参数进行randwrite测试之后,再进行randread时会出现此现象...

LastRitter
18分钟前
0
0
JavaScript引用类型Object常见用法实例分析

1、JavaScript数据类型 (1)基本类型 5种基本类型:Undefined、Null、Boolean、Number、String (2)引用类型 5种引用类型:Object、Array、Date、RepExp、Function (3)基本类型与引用类型的异同...

peakedness丶
25分钟前
0
0
教你理清SpringBoot与SpringMVC的关系

spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc。spring mvc 是只是spring 处理web层请求的一个模块。因此他们的关系大概就是这...

别打我会飞
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部