2010-07-21 6 views
1

Supposons que vous souhaitiez conserver une liste des 10 derniers visiteurs de votre site dans memcache.Effectuer une modification de matrice atomique dans memcache

Chaque fois que quelqu'un accède à votre site, vous voulez les pousser sur un tableau et décaler le premier visiteur dans le tableau.

Bien sûr, un problème potentiel est que plusieurs visiteurs pourraient écraser et lire ce tableau en même temps, en se faisant peut-être trébucher. Bien sûr, il n'y a pas de push/shift atomique dans memcache.

scénario d'incohérence possible avec 2 utilisateur quasi-simultanée accès:

  1. utilisateur A obtient tableau à partir memcache
  2. utilisateur B reçoit tableau à partir memcache
  3. utilisateur A modifie tableau (changement sera perdu)
  4. utilisateur B modifie tableau
  5. utilisateur tableau A stocke dans memcache
  6. tableau de l'utilisateur B stocke dans memcache (écrasera le changement de A à l'étape 3)

Comment pouvez-vous accomplir quelque chose comme cela en utilisant correctement memcache?

Répondre

0

Nous avons construit CAS pour cela.

  1. utilisateur A obtient tableau
  2. utilisateur B reçoit tableau
  3. utilisateur A change tableau
  4. utilisateur B tableau change
  5. utilisateur dans le tableau A des cas - gagne
  6. utilisateur dans le tableau B Cas - perd
  7. L'utilisateur B répète à partir de 2