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
本文探讨了使用Memcached时常见的两个陷阱:一是不同算法下设置过期时间的区别;二是默认配置下故障节点处理的不同表现。文章通过具体示例对比了余数分布算法与一致性哈希算法在设置缓存过期时间上的差异,并指出了一致性哈希算法能够自动摘除故障服务器的特点。
944

被折叠的 条评论
为什么被折叠?



