Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Redis - Usando o valor Incr em uma transação


A resposta aceita acima é desnecessariamente complicada. Você não precisa usar um multi ou relógio nesta circunstância. O INCR já é atômico e foi projetado para esse cenário exato. Edit:Obrigado a Itamar Haber e robe007 por alterar a resposta aceita. :)

Você pode simplesmente fazer isso:
var name = 'Josh';
client.incr('id', function(err, id) {
    client.hmset('user:' + id, 'username', name);
});

Ao fazer o acima, o INCR bloqueia automaticamente a chave "id", a incrementa para você, a desbloqueia e a devolve para você. Assim, não há como alguém obter um ID de usuário duplicado usando o código acima. Ele também tem o benefício de nunca ser realmente capaz de falhar, ao contrário de WATCH/GET, onde você teria que verificar falhas e executar suas consultas novamente se elas falhassem.