1、过期时间的坑
比如现在我们要设置缓存1秒后过期,用memcached默认的配置(默认采用余数分布算法--Memcached::DISTRIBUTION_MODULA),代码应该这样写
$servers = array
(
0 => array
(
0 => '127.0.0.1',
1 => 11212
),
1 => array
(
0 => '127.0.0.1',
1 => 11213
)
);
$cache = new Memcached();
$cache->addServers($servers);
$cache->set('cclehui_test',1,time()+1);//1秒后过期
sleep(1);
var_dump($cache->get('cclehui_test'));
如果采用一致性hash算法,代码确应该这样写
$servers = array
(
0 => array
(
0 => '127.0.0.1',
1 => 11212
),
1 => array
(
0 => '127.0.0.1',
1 => 11213
)
);
$cache = new Memcached();
$cache->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$cache->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, TRUE);
$cache->addServers($servers);
$cache->set('cclehui_test',1,1);//1秒后过期
sleep(1);
var_dump($cache->get('cclehui_test'));
2、使用默认配置挂掉的server不会自动摘除,但使用一致性哈希算法会自动摘除挂掉的server
我们都知道memcache的分布式是通过客户端来实现的,在php中也是如此,php 的memcached扩展中就存在如标题所述的一个Bug,关于这个bug的解释可以参考:http://skysbird.duichenmei.com/?p=368