Domanda

Di recente sto imparando redis e onestamente molto impressionato e morire per usarlo.Una delle cose che continuano a preoccuparsi di me, è "come faccio a controllare redis".Per essere precisi sto cercando di risolvere il seguente

Dire che ho un milioni di hash memorizzato come di seguito

usage:1 = {created: 20100521, quantity:9, resource:1033, user:1842, ...}
usage:2 = {created: 20100812, quantity:3, resource:7233, user:1842, ...}
usage:3 = {created: 20100927, quantity:4, resource:1031, user:76, ...}

Si prega di notare che ci sono molte chiavi di hash ho mostrato solo 4.Ora che voglio per trovare i record in un intervallo di date specifico, da parte dell'utente, delle risorse o per un utente in un determinato periodo.

Ho il sospetto che ci sono redis modelli specifici per il recupero di tali dati.Io sono un programmatore python.Ho fatto guardare redisco(ohm porta) che supporta alcune quering, ma non sono sicuro se lo fa arrivare tutti i dati e, quindi, i filtri in python.

È stato utile?

Soluzione

Per Redis, è meglio capire che tipo di modelli di query che si desidera oltre i vostri dati prima di decidere come si sta andando a memorizzare.

Per esempio, se si desidera fare un intervallo di date query su un insieme di dati, è possibile memorizzare i dati come un insieme ordinato, dove i tasti sono gli elementi di dati che si desidera eseguire una query su, e il punteggio è un unix timestamp.

Nel tuo esempio di cui sopra, potrei memorizzare il vostro esempio hash come:

 user_to_resource:i = user:j                   # key -> value forward map
 resources => (resource:i, created_timestamp)  # sorted set
 count_resource:i = quantity                   # key -> value quantity map

Che è, mi piacerebbe avere molti avanti e indietro mappe a seconda dei modelli di query mi piacerebbe supporto.

Altri suggerimenti

la query che hai citato sono molto in funzione del tempo.In questo caso si sarebbe saggio usare un insieme ordinato.Si potrebbe utilizzare l'indicatore di data / ora, come il punteggio per ogni voce.

Per esempio, si può fare come segue:

hmset usage:1 created 20100521 quantity 9 resource 1033 user 1842
hmset usage:2 created 20100812 quantity 3 resource 7233 user 1842
hmset usage:3 created 20100927 quantity 4 resource 1031 user 76

zadd usage 20200521 1
zadd usage 20100812 2
zadd usage 20100927 3

Per recuperare tutto:

sort usage get 
# get usage:*->created get usage:*->quantity get usage:*->resource get usage:*->user

o

lrange usage 0 -1

Per ottenere gli indici di un intervallo:

zrangebyscore usage 20100800 20100900

Per le query in base a una chiave hash valore, c'è un utile aggiunta di redis, che permette l'uso di script scritti in lua.Si potrebbe facilmente scrivere un semplice script lua all'interno di un pitone heredoc e utilizzare il redis.eval metodo per passare lo script di redis.Lo script potrebbe essere un loop che filtra in base al valore che si sta cercando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top