2011-07-28 60 views
6

Pasé por la lista de comandos en los hashes de REDIS. ¿Es posible asignar múltiples valores a una clave de hash en REDIS? Por ejemplo, estoy tratando de representar la siguiente tabla en forma de hash.¿Escribir una consulta para agregar valores múltiples a una clave en hash de REDIS?

Prod_Color | Prod_Count | Prod_Price | Prod_Info 
------------------------------------------------------------ 
    Red  |  12  |  300  | In Stock 
    Blue  |  8  |  310  | In Stock 

Me trataron los siguientes comandos de hash posteriormente

HMSET Records Prod_Color "Red" Prod_Count 12 Prod_Price 300 Prod_Info "In Stock" 

HMSET Records Prod_Color "Blue" Prod_Count 8 Prod_Price 310 Prod_Info "In Stock" 

Sin embargo, cuando intento para recuperar el hash utilizando el comando HGETALL Records, estoy viendo sólo la segunda fila de valores insertados (es decir, azul, 8,310, en inventario)! Entiendo que puedo crear un hash separado e insertar la segunda fila de valores, sin embargo, tengo la intención de insertar todos los valores en un solo hash.

+1

¡Gracias por sus respuestas! Por lo tanto, para crear matrices de hash, necesito usar sets. –

+0

@abhijit Puede ser así. Además, probar cosas en 'redis-cli' es una buena forma de dominar a Redis. – Niloct

Respuesta

1

Creo que no entiendes cómo funcionan los hash. No puede tener dos campos idénticos con valores diferentes. Su segundo comando HMSET sobrescribe los valores del primer comando. Necesitarás usar campos únicos o una clave diferente.

3

No puede tener varios elementos con la misma clave en un hash. Sin embargo, si se quiere, ya sea recuperar todos los elementos o de una sola fila de teclas que puede utilizar JSON:

Records red = {color:red, price:12, info:"300 in stock"} 
Records blue = {color:blue, price:8, info:"310 in stock"} 

Si no desea utilizar JSON que tendrá que utilizar múltiples hashes, con ser un hash una fila en la mesa. Puede admitir la función get all guardando también un conjunto que contiene la clave de cada uno de los hashes.

6

Lo que podría hacer, y lo vi en otros lugares además de mi código, es escribir el hash con un sufijo. Es probable que tenga un sufijo que identifica cada registro, que utilizará los colores aquí:

EN TIEMPO INSERT:

HMSET Records:red Prod_Color "Red" Prod_Count 12 Prod_Price 300 Prod_Info "In Stock" 
HMSET Records:blue Prod_Color "Blue" Prod_Count 8 Prod_Price 310 Prod_Info "In Stock" 

/* For each HMSET above, you issue SADD */ 
SADD Records:Ids red 
SADD Records:Ids blue 

en tiempo de consulta:

/* If you want to get all products, you first get all members */ 
SMEMBERS Records:Ids 

/* ... and then for each member, suppose its suffix is ID_OF_MEMBER */ 
HGETALL Records:ID_OF_MEMBER 

/* ... and then for red and blue (example) */ 
HGETALL Records:red 
HGETALL Records:blue 

es probable que desee utilizar el primary key como el sufijo, ya que esto debería estar disponible para usted a partir de los registros de la base de datos relacional. Además, debe mantener el conjunto de miembros (por ejemplo, SREM Records:Ids red) al eliminar las claves hash (por ejemplo, DEL Records:red). Y también recuerde que Redis es realmente bueno como una memoria caché mejorada, debe configurarlo bien para persistir en los valores (y mantener el rendimiento con eso).

Cuestiones relacionadas