2011-10-09 18 views
7

Voy a almacenar un contador de visitas para varias URL en Redis. Estoy planeando usar un hash porque parece tener sentido. También tiene una función de incremento atómico que es crítica para mi caso de uso.Atomic GETSET en un hash en Redis

De vez en cuando, voy a agregar el recuento de aciertos por URL en otro almacén de datos. Para este propósito, me gustaría obtener el recuento de aciertos y restablecerlo a cero. Parece que no puedo encontrar una operación como GETSET que funcione en hashes. Si registro un acierto entre obtener el recuento de aciertos y restablecerlo a cero, se perderá sin algún tipo de operación atómica.

¿Echo de menos algo? Una alternativa que se me ocurrió sería codificar la URL en mi código de cliente (python) y usar el string commands, pero parece un truco cuando Redis proporciona un hash.

Respuesta

6

tratar de ver Redis transactions documentos, a saber, la combinación de WATCH y MULTI comandos:

observaba teclas se controlan con el fin de detectar cambios en su contra. Si al menos una clave vigilada se modifica antes del comando EXEC, la transacción completa se anula y EXEC devuelve una respuesta Null multivoltaje a notifica que la transacción falló.

...

Entonces, ¿qué es un reloj realmente? Es un comando que hará que el EXEC sea condicional: estamos pidiendo Redis para realizar la transacción solo si ningún otro cliente modificó de las teclas VERIFICADAS. De lo contrario, la transacción no se ingresa en absoluto.

+1

¿Puede proporcionar un ejemplo de código con esta respuesta? – Eric