Pregunta

Recientemente estoy aprendiendo Redis y honestamente muy impresionado y morir para usarlo. Una de las cosas que me mantienen molestando es "¿cómo puedo consulta Redis". Para ser más específicos que estoy tratando de resolver siguiente

decir que tengo un millones de hashes almacenados como a continuación

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, ...}

Tenga en cuenta que hay muchas llaves en hashes he mostrado sólo 4. Ahora que quiero encontrar registros en intervalo de fechas específico, por usuario, por recursos o para un usuario en un periodo determinado.

sospecho que hay Redis patrones específicos para recuperar dichos datos. Soy un programador de Python. Hice vistazo a redisco (puerto ohmios) que soporta algunos quering pero no estoy seguro si lo hace obtener todos los datos y luego los filtros en Python.

¿Fue útil?

Solución

Para Redis, lo mejor es entender qué tipo de patrones de consulta que desee sobre sus datos antes de decidir cómo se va a almacenarla.

Por ejemplo, si usted quiere hacer una consulta rango de fechas sobre un conjunto de datos, puede almacenar esos datos como un conjunto ordenado donde las claves son los elementos de datos que desea consultar otra vez, y la puntuación es una marca de tiempo Unix .

En el ejemplo anterior, podría almacenar su ejemplo de hash como:

 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

Es decir, tendría muchas adelante y mapas inversa dependiendo de los patrones de consulta que me gustaría apoyo.

Otros consejos

las consultas que mencionas son altamente dependiente del tiempo. En este caso, sería aconsejable utilizar un conjunto ordenado. Se podría utilizar el sello de fecha y hora como la puntuación para cada entrada.

Por ejemplo, usted podría hacer lo siguiente:

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

Para recuperar todo:

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

o

lrange usage 0 -1

Para obtener los índices de un rango:

zrangebyscore usage 20100800 20100900

Para consultas sobre la base de un valor clave hash, hay una adición útil a Redis que permite el uso de scripts escritos en Lua. Desde aquí se puede escribir un script lua sencilla dentro de un pitón heredoc y utilizar el método redis.eval para pasar el script para Redis. El guión puede ser un bucle que filtra basa en el valor que busca.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top