2013-06-15 3 views
0

Я использую memcached для хранения сеансов php. Важно, чтобы запрос выполнялся синхронно (чтобы избежать дублирования транзакций или операций), но при использовании сеанса «memcached» «сеансовая блокировка» не работает.PHP Memcached Session Locking Enable

- это способ блокировки сеанса «memcached» до тех пор, пока не будет выполнен один запрос?

+0

Вы можете найти более подробную информацию об этом? Думаю, я не понимаю ваш вопрос. – Sliq

ответ

0

Возможно, попробуйте что-нибудь наподобие $(field_name)_is_locked = true, когда вы начнете, когда вы закончите $(field_name)_is_locked = false и передадите переменную на сервер при ее обновлении.

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 возвращает ложь, то нет блокировки, или операция нависла и прошла 60-секундный тайм-аут, указанный в добавочный вызов выше.

1

Поскольку вы просили надежных/официальных источников:

Memcached расширение поддерживает блокировку сессии, начиная с версии 3.0.4, в соответствии с документом журнала изменений на странице расширения PECL: http://pecl.php.net/package-info.php?package=memcache&version=3.0.4

Если вам случится выполните более раннюю версию (это означает, что вашей версии расширения memcached больше 4 лет), вам не повезло и нужно обновить.

+0

обработчик сеанса настроен в php.ini: 'session.save_handler = memcache session.save_path =" tcp: //192.168.*.*: * "' PHP использует php_memcache.dll (Win Server 2008, php 5.3) переход на PECL - хорошая идея. спасибо. – user492589