Codeigniter memcached驱动程序:锁定工作缓慢

时间:2018-03-16 16:49:10

标签: php memcached codeigniter-3

我在memcached上启用了codeigniter。它工作正常,但我注意到脚本执行有些延迟。我调试了Session_memcached_driver并发现它在330-336行停留了几秒钟

    do
    {
        if ($this->_memcached->get($lock_key))
        {
            sleep(1);
            continue;
        }

        if ( ! $this->_memcached->set($lock_key, time(), 300))
        {
            log_message('error', 'Session: Error while trying to obtain lock for '.$this->_key_prefix.$session_id);
            return FALSE;
        }

        $this->_lock_key = $lock_key;
        break;
    }
    while (++$attempt < 30);

显然,它等待释放,需要几秒钟(5-7秒)。也许我没有关闭我应该做的事情或以错误的方式使用CI会话机制?  PHP 7,Linux,CI 3.1.4

1 个答案:

答案 0 :(得分:0)

我完全有同样的问题。 延迟是由touch()命令引起的。如果您查看驱动程序行109:

$ this-> _ memcached-> setOption(Memcached :: OPT_BINARY_PROTOCOL,TRUE);

暂时评论一下,看看是否可以解决问题。如果是,则需要在服务器上更新libmemcached。升级后,重新启动Web服务器。

我有libmemcached 1.0.16,已升级到1.0.18 如果您不升级,而只是注释掉那行,会话时间将不会因用户活动而延长,并且会更快地过期-由配置文件定义。

祝你好运!