PHP Memcached会话锁定启用

PHP Memcached会话锁定启用,php,session,locking,memcached,Php,Session,Locking,Memcached,我使用“memcached”存储php会话。 重要的是,请求必须同步(以避免重复的事务或操作),但在使用“memcached”会话时,“会话锁定”不起作用 是否有某种方法可以锁定“memcached”会话,直到执行一个请求为止?当您启动时,可以尝试类似于$(field\u name)\u is\u locked=true的方法,然后当您完成$(field\u name)\u is\u locked=false并在更新变量时将其传递给服务器。没有内置变量,但是你可以自己写东西让你的代码原子化 $k

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


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

当您启动时,可以尝试类似于
$(field\u name)\u is\u locked=true
的方法,然后当您完成
$(field\u name)\u is\u locked=false
并在更新变量时将其传递给服务器。

没有内置变量,但是你可以自己写东西让你的代码原子化

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

因为您需要可靠的/官方的来源:

根据PECL扩展页面上的changelog文档,memcached扩展自3.0.4版起支持会话锁定:


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

您能提供更多信息吗?我想我不明白你的问题。会话处理程序是在php.ini中配置的:
session.save\u handler=memcache session.save\u path=”tcp://192.168.*****“
PHP使用PHP_memcache.dll(Win Server 2008,PHP5.3)切换到PECL是个好主意。谢谢