php memcached使用中的坑

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值