2011-10-09 13 views
7

Ho intenzione di memorizzare un contatore di visite per un numero di URL in Redis. Sto pensando di usare uno hash perché sembra avere senso. Ha anche una funzione di incremento atomico che è fondamentale per il mio caso d'uso.GETSET Atomico su un hash in Redis

Ogni tanto, ho intenzione di aggregare il numero di visite per URL in un altro archivio dati. A tal fine, mi piacerebbe ottenere il conteggio dei colpi e resettarlo a zero. Non riesco a trovare un'operazione come GETSET che funziona con gli hash. Se registro un hit tra il numero di hit e il reset a zero, si perderà senza una qualche operazione atomica.

Mi manca qualcosa? Un'alternativa che mi è venuta in mente sarebbe stata l'hash dell'URL nel mio codice client (python) e usare lo string commands, ma questo sembra un po 'un trucco quando Redis fornisce un hash stesso.

risposta

6

provare a guardare redis transactions documenti, cioè la combinazione di WATCH e MULTI comandi:

osservò chiavi vengono monitorati per rilevare cambiamenti nei loro confronti. Se almeno una chiave guardata viene modificata prima del comando EXEC, l'intera transazione si interrompe e l'EXEC restituisce una risposta multi-bulk Null a notificando che la transazione non è riuscita.

...

Allora, che cosa significa davvero WATCH? È un comando che condizionerà l'EXEC: chiediamo a Redis di eseguire la transazione solo se nessun altro client ha modificato alcun delle chiavi WATCHed. Altrimenti la transazione non è stata inserita affatto.

+1

Potete fornire un esempio di codice con questa risposta? – Eric