Sto usando NodeJS + Express + Redis su RedisOnGo + node_redis come client. Mi aspetto un sacco di concorrenza, quindi cerco di provare WATCH. Questo esempio non conterrà Express, solo le cose necessarie.Redis GUARDA MULTI EXEC da un client
var redis = require("redis")
var rc = redis.createClient(config.redis.port, config.redis.host)
rc.auth(config.redis.hash, function(err) {
if (err) {
throw err
}
})
rc.on('ready', function() {
rc.set("inc",0)
for(var i=1;i<=10;i++){
rc.watch("inc")
rc.get("inc",function(err,data){
var multi = rc.multi()
data++ // I do know I can use rc.incr(), this is just for example
multi.set("inc",data)
multi.exec(function(err,replies){
console.log(replies)
})
})
}
})
risultato Expecting: ottenere gli errori N in callback exec e arrivare finalmente "inc" variabile = 10-N.
Risultato inaspettato: ottenere 0 errori di callback exec ma alla fine ottenere "inc" variabile = 1.
orologio non funziona con il mio codice.
Ho trovato questa discussione redis and watch + multi allows concurrent users. Dicono che è a causa del solo cliente redis.
Quindi ho trovato questa discussione Should I create a new Redis client for each connection?. Dicono che la generazione di un nuovo client per ogni transazione "non è assolutamente raccomandabile". Mi sono perso.
Si noti inoltre che devo autenticarsi sul server Redis. Grazie in anticipo!
EDITION 1:
sono stato in grado di farlo funzionare utilizzando esempio Redis locale (quindi non uso client.auth) con la creazione di una nuova connessione client prima di ogni iterazione WATCH-MULTI-EXEC. Non sono sicuro che sia buono, ma i risultati ora sono accurati al 100%.
EDITION 2 ha reso il lavoro se creo una nuova connessione client prima di ogni iterazione WATCH-MULTI-EXEC e poi fare client.auth e aspetto client.on.
La domanda esiste ancora, è giusto che crei nuove connessioni client per ogni iterazione?
Grazie, la risposta sembra essere abbastanza esplicativo e si hanno capito la mia domanda corretta. Se non ci sono più risposte in 2 giorni, bounty è tuo. – igorpavlov