Redis
 sql >> Database >  >> NoSQL >> Redis

Redis - Utilizzo del valore Incr in una transazione

La risposta accettata sopra è inutilmente complicata. Non è necessario utilizzare un multiplo o un orologio in questa circostanza. INCR è già atomico ed è progettato per questo scenario esatto. Modifica:grazie a Itamar Haber e robe007 per aver cambiato la risposta accettata. :)

Puoi semplicemente farlo:

var name = 'Josh';
client.incr('id', function(err, id) {
    client.hmset('user:' + id, 'username', name);
});

Facendo quanto sopra, INCR blocca automaticamente la chiave "id", la incrementa per te, la sblocca e te la restituisce. Pertanto, non c'è modo per nessuno di ottenere un ID utente duplicato utilizzando il codice sopra. Ha anche il vantaggio di non essere mai realmente in grado di fallire, a differenza di WATCH/GET, dove dovresti verificare la presenza di errori ed eseguire nuovamente le query se non hanno avuto successo.