我使用“memcached”来存储 php 会话。重要的是,请求必须是同步的(以避免重复的事务或操作),但是在使用“memcached”会话时,“会话锁定”不起作用。
是否有某种方法可以锁定“memcached”会话,直到执行一个请求?
没有内置的东西,但是您可以自己编写东西以使您的代码具有原子性。
$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
,并在你更新它时将变量传递给服务器。