启用PHP Memcached会话锁定功能


PHP Memcached Session Locking Enable

我使用"memcached"来存储php会话。重要的是,请求必须是同步的(以避免重复的事务或操作),但是当使用"memcached"会话时,"会话锁定"不起作用。

是一些方法来锁定"memcached"会话,直到一个请求将被执行?

no没有内置的东西,但是您可以自己编写一些东西来使您的代码原子化。

$key = 'lockable_key_name';
$lockkey = $key.'##LOCK';
if($memcached->add($lockkey, '', 60)) {
    $storedvalue = $memcached->get($key);
    // do something with $storedvalue
    $memcached->set($key, $newvalue);
    // release
    $memcached->delete($lockkey);
}
在你的代码中,你可以这样检查锁:
if(!$memcached->get($lockkey)) {
    // then do something
}

如果get方法返回false,则没有锁,或者操作已经挂起并超过了上面add调用中指定的60秒超时。

既然你要求可靠的/官方的消息来源:

memcached扩展从3.0.4版开始支持会话锁定,根据PECL扩展页面的变更日志文档:http://pecl.php.net/package-info.php?package=memcache&version=3.0.4

如果您碰巧运行较早的版本(这意味着您的memcached扩展版本超过4年),那么您就不走运了,应该升级。

当你开始时可以尝试$(field_name)_is_locked = true,然后当你完成$(field_name)_is_locked = false并在更新时将变量传递给服务器