我使用"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
并在更新时将变量传递给服务器