Acceder a una lista por cualquier índice que no esté cerca de la parte frontal o final será costoso, con un costo de O (N). Para listas grandes, esto no es muy eficiente.
El uso de hashes puede ser una mejor opción para sus necesidades. Esto utilizará más memoria que una lista, pero proporcionará casi O (1) acceso.
Un hash en redis es una clave con nombre que puede contener campos y valores arbitrarios.
Puede almacenar el registro completo del usuario en un solo hash redis, nombrado con el member_id (esperemos que este sea un valor corto). Si el member_id se garantiza que sea único para cada usuario, aquí es cómo llenar un hash de usuario con member_id 42.
hset user:42 email [email protected]
hset user:42 username foobar
hset user:42 logincount 0
El Redis "nombre clave" aquí es "usuario: 42". Cada usuario obtendrá una sola clave, similar a una sola fila en una base de datos SQL, pero más flexible. A continuación, puede actualizar dos valores hash auxiliares: uno para asignar nombres de usuario a member_id y otro para asignar direcciones de correo electrónico a member_id. Esto supone que tiene una relación 1: 1 entre member_id, username y email address.
hset username_to_id foobar 42
hset email_to_id [email protected] 42
Cuando tenga que buscar la dirección de correo electrónico para un usuario particular, primero busca la member_id del email_to_id
hash y luego recuperar el campo email
a partir del hash al usuario clave: member_id Del mismo modo, puede comenzar con un nombre de usuario, buscar el member_id en el hash username_to_id
, y luego llegar al registro del usuario almacenado en el usuario: member_id
hash.
Aquí se muestra un ejemplo para buscar el nombre de usuario dado una dirección de correo electrónico:
redis> hget email_to_id [email protected]
"42"
redis> hget user:42 username
"foobar"
redis>
puede agregar más registros para el usuario mediante la adición de más campos para el "usuario: " hash. Si desea incrementar un contador de inicio de sesión, que es sencillo, así:
redis> hincrby user:42 login_count 1
(integer) 1
redis> hgetall user:42
1. "email"
2. "[email protected]"
3. "username"
4. "foobar"
5. "login_count"
6. "1"
redis>
puede encontrar en el sitio more information about hashes redis.io.
muchas gracias. pero, ¿por qué no se establece u ordena el conjunto – Leon
, pero si 1 m de usuario significa que obtuvo 1m de identificación hash, cuando se vuelve particular, reducirá el rendimiento – Leon