1、毫秒级超时控制

memcache默认超时时间是:1s,但查看手册及查看扩展源码发现其实memcache是可以支持毫秒级超时控制的,需要注意php memcache不同版本的差异,addServer函数说明如下:

在执行addServer时不会连接memcached服务器,而在第一次执行命令时候需要2倍的timeout时间,所有当memcached获取数据超时的时候,花费时间是2倍的timeout时间。

3.0.4之前的版本(例如:2.2.5):

Memcache::addServer方法

bool Memcache::addServer ( string $host [, int $port = 11211 [, bool $persistent [, int $weight [, int $timeout [, int $retry_interval
[, bool $status [, callback $failure_callback [, int $timeoutms ]]]]]]]] )

在php.ini中加入memcache.default_timeout_ms 参数

在php脚本中ini_set("memcache.default_timeout_ms", 200),如此设置更灵活

在php脚本中addServer时增加全部的参数设置,例如:

$mem->addServer("127.0.0.1", 11211, true, 1, 1, -1, true, NULL, 200);

此时需注意:$weight参数对memcache的连接时间有显著的影响,$weight的默认值为1,一旦设置为别的数值,连接时间便会由毫秒级变成50ms左右,立竿见影。

3.0.4及之后的版本(例如:3.0.6):

Memcache::addServer方法,去除了老版本中第9个参数,第5个参数timeout支持float类型,即设置为0.2表示200毫秒

bool Memcache::addServer ( string host [, int port [, bool persistent [, int weight [, double timeout [, int retry_interval
[, bool status [, callback failure_callb
ack ] ] ] ] ] ] ] )

在php脚本中addServer时设置超时时间,例如:

$mem->addServer("127.0.0.1", 11211, true, 1, 0.2);

2、memcached能接受的key的最大长度是多少?

key 的最大长度是250个字符。需要注意的是,250是memcached服务器端内部的限制,如果您使用的客户端支持”key的前缀”或类似特性,那么 key(前缀+原始key)的最大长度是可以超过250个字符的。

我们推荐使用使用较短的key,因为可以节省内存和带宽。

3、memcached对item的过期时间有什么限制?

过期时间最大可以达到30天。memcached把传入的过期时间(时间段)解释成时间点后,一旦到了这个时间点,memcached就把item置为失效状态。这是一个简单但obscure的机制。

4、memcached最大能存储多大的单个item?

1MB。如果你的数据大于1MB,可以考虑在客户端压缩或拆分到多个key中。

5、为什么memcached会堵车?

linux服务器系统中有个参数:vm.swappiness,此参数的值在0-100之间,表示在ram和虚拟内存中的操作比例(参考地址:https://scottlinux.com/2010/06/23/adjust-your-swappiness/)

0:全部在ram中

100:全部在虚拟内存中

6、高并发下memcache超时重复写入的问题

7、memcache内容存储机制