我在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
答案 0 :(得分:0)
我完全有同样的问题。 延迟是由touch()命令引起的。如果您查看驱动程序行109:
$ this-> _ memcached-> setOption(Memcached :: OPT_BINARY_PROTOCOL,TRUE);
暂时评论一下,看看是否可以解决问题。如果是,则需要在服务器上更新libmemcached。升级后,重新启动Web服务器。
我有libmemcached 1.0.16,已升级到1.0.18 如果您不升级,而只是注释掉那行,会话时间将不会因用户活动而延长,并且会更快地过期-由配置文件定义。
祝你好运!