Es tan simple como almacenar cada usuario dos veces. Una vez con la clave de identificación y una vez con la clave de nombre de usuario.
Una forma más compacta de hacer esto en términos de memoria es tener nombres de usuario clave para los identificadores, por lo que su consulta de nombre de usuario le gustaría como: consultar por nombre de usuario, obtener ID; poner en id, obtener información.
Desafortunadamente, no hay una buena manera de tener la misma información real con dos claves diferentes.
Por ejemplo, cuando se insertaría un nuevo usuario y entonces se le pregunta por ella:
redis 127.0.0.1:6379> HMSET id:4532143215432 username davejlong email [email protected]
OK
redis 127.0.0.1:6379> HMSET user:davejlong id 4532143215432 email [email protected]
OK
redis 127.0.0.1:6379> HGET id:4532143215432 username
"davejlong"
redis 127.0.0.1:6379> HGET user:davejlong id
"4532143215432"
redis 127.0.0.1:6379> HMGET user:davejlong email id
1) "[email protected]"
2) "4532143215432"
redis 127.0.0.1:6379> DEL user:davejlong
(integer) 1
redis 127.0.0.1:6379> DEL id:4532143215432
(integer) 1
Observe que cuando estoy creando el usuario, utilizo HMSET dos veces. Ahora puedo consultar contra el nombre de usuario o la identificación. También tengo que borrar ambas claves ahora.
He eludido esto con "Una forma más compacta de hacer esto ..." pero era demasiado flojo para escribirlo. +1 –
@philpirozhkov cuál ... –
Lamento no haber entendido este punto ya que no está agregando la capacidad de buscar por correo. 'Usuario SET: [email protected] 1' y puede encontrarlo por correo –