sql >> Base de Datos >  >> NoSQL >> Redis

Redis:uso del valor Incr en una transacción

La respuesta aceptada arriba es innecesariamente complicada. No es necesario utilizar un multi o reloj en esta circunstancia. INCR ya es atómico y está diseñado para este escenario exacto. Editar:Gracias a Itamar Haber y robe007 por cambiar la respuesta aceptada. :)

Simplemente puede hacer esto:

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

Al hacer lo anterior, INCR bloquea automáticamente la clave "id", la incrementa por usted, la desbloquea y se la devuelve. Por lo tanto, no hay forma de que nadie obtenga una identificación de usuario duplicada usando el código anterior. También tiene la ventaja de que en realidad nunca puede fallar, a diferencia de WATCH/GET, en el que tendría que comprobar si hay fallas y volver a ejecutar las consultas si fallaran.