Attualmente memorizzo circa 50k hash nella mia tabella Redis, ognuno ha 5 coppie chiave/valore. Una volta al giorno eseguo un processo batch che aggiorna i valori hash, inclusa l'impostazione di alcuni valori chiave sul valore dell'altra chiave in un hash.Redis: il modo migliore per ottenere tutti i valori hash
Ecco il mio codice python che scorre chiavi e set old_code per new_code se il valore new_code esiste per un hash dare:
pipe = r.pipeline()
for availability in availabilities:
pipe.hget(availability["EventId"], "new_code")
for availability, old_code in zip(availabilities, pipe.execute()):
if old_code:
availability["old_code"] = old_code.decode("utf-8")
for availability in availabilities:
if "old_code" in availability:
pipe.hset(
availability["EventId"], "old_code", availability["old_code"])
pipe.hset(availability["EventId"], "new_code", availability["MsgCode"])
pipe.execute()
E 'un po' strano per me che devo scorrere le chiavi due volte per ottenere lo stesso risultato, c'è un modo migliore per farlo?
Un'altra cosa che sto cercando di capire è come ottenere tutti i valori hash con le migliori prestazioni. Ecco come ho attualmente faccio:
d = []
pipe = r.pipeline()
keys = r.keys('*')
for key in keys:
pipe.hgetall(key)
for val, key in zip(pipe.execute(), keys):
e = {"event_id": key}
e.update(val)
if "old_key" not in e:
e["old_key"] = None
d.append(e)
Quindi, in pratica io keys *
poi iterare con HGETALL
in tutte le chiavi per ottenere i valori. Questo è troppo lento, specialmente l'iterazione. C'è un modo più veloce per farlo?
Puoi spiegare un po 'di più sulla prima parte della domanda, Cosa devi fare, senza usare alcun linguaggio di programmazione. – Malinga
http://stackoverflow.com/questions/38065714/is-there-a-command-in-redis-for-hash-data-structure-similar-to-mget/38066688#38066688 controlla la mia risposta qui – Malinga
Per ogni hash/row Raccolgo il codice corrente e lo memorizzo come new_code, salvando il new_code corrente come old_code (per registrare lo stato precedente e confrontare old_code e new_code su ogni estrazione di dati). –