2013-06-15 5 views
0

J'utilise "memcached" pour stocker des sessions php. Il est important que cette requête soit synchrone (pour éviter les transactions ou les opérations en double), mais lors de l'utilisation de la session "memcached", le "verrouillage de session" ne fonctionne pas.PHP Memcached Session Locking Activer

est une méthode pour verrouiller la session "memcached" jusqu'à ce qu'une requête soit exécutée?

+0

Pouvez-vous fournir plus d'informations à ce sujet? Je ne comprends pas votre question je pense. – Sliq

Répondre

0

Essayez peut-être quelque chose comme $(field_name)_is_locked = true lorsque vous démarrez puis lorsque vous avez terminé $(field_name)_is_locked = false et transmettez la variable au serveur lorsque vous le mettez à jour.

1

Il n'y a rien de construit, mais vous pouvez écrire vous-même des choses pour rendre votre code atomique.

$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); 
} 

Dans votre code, vous pouvez vérifier le verrouillage en faisant:

if(!$memcached->get($lockkey)) { 
    // then do something 
} 

Si la méthode get retourne false alors il n'y a pas de verrou, ou l'opération a suspendu et passé les 60 secondes délai d'attente spécifié dans l'appel d'ajout ci-dessus.

1

Depuis que vous demandiez des sources crédibles/officielles:

L'extension memcached supporte le verrouillage de la session depuis la version 3.0.4, d'après le document changelog sur la page d'extension PECL: http://pecl.php.net/package-info.php?package=memcache&version=3.0.4

Si vous arrive exécuter une version antérieure (cela signifie que votre version de l'extension memcached a plus de 4 ans), vous n'avez pas de chance et vous devriez mettre à jour.

+0

Le gestionnaire de session est configuré dans php.ini: 'session.save_handler = memcache session.save_path =" tcp: //192.168.*.*: * "' PHP utilise php_memcache.dll (Win Server 2008, php 5.3) passer à PECL est une bonne idée. merci. – user492589