0

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

是否有某种方法可以锁定“memcached”会话,直到执行一个请求?

4

3 回答 3

1

没有内置的东西,但是您可以自己编写东西以使您的代码具有原子性。

$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 秒超时。

于 2013-08-16T10:22:09.983 回答
1

由于您要求可靠/官方来源:

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

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

于 2013-08-16T11:55:22.567 回答
0

也许$(field_name)_is_locked = true在你开始时尝试一些事情,然后在你完成时尝试$(field_name)_is_locked = false,并在你更新它时将变量传递给服务器。

于 2013-08-15T15:26:19.567 回答