Saltar al contenido

Comprobando si un valor ya existe en una lista Redis

Por fin luego de tanto batallar ya encontramos la contestación de este rompecabezas que muchos usuarios de nuestro espacio presentan. Si quieres aportar algo no dejes de dejar tu comentario.

Solución:

Sus opciones son las siguientes:

  1. Utilizando LREM y reemplazándolo si se encuentra.
  2. manteniendo una separación SET junto con su LIST
  3. Bucle a través de la LIST hasta que encuentres el artículo o llegues al final.

Las listas de Redis se implementan como una http://en.wikipedia.org/wiki/Linked_list, de ahí las limitaciones.

Creo que su mejor opción es mantener un duplicado SET. Esto es lo que suelo hacer. Piense en ello como un índice adicional. Independientemente, asegúrese de que sus acciones sean atómicas con MULTIEXEC o secuencias de comandos Lua.

Las listas permiten duplicados, pero no proporcionan una forma sencilla de verificar la existencia y, como recomienda @Fritzy, debe:

  • Realice múltiples operaciones (elimine y luego agregue nuevamente si se encuentra durante la eliminación) para verificaciones simples = costo en el tiempo
  • Mantener un conjunto separado = Costo en memoria

Me sorprende que nadie te aconseje que uses un Tabla de picadillo o un ordenado Colocar que combinan las ventajas de permitiendo la duplicidad (Al almacenar el número de elementos como valor – Tabla de picadilloo anotar – Conjunto ordenado) y miembros de indexación por naturaleza de una tabla hash/conjunto.


Tabla de picadillo

Para comprobar si hay un key existencia, uso HEXISTS para un campo específico que devuelve 0 si el miembro especificado no existe. También podrías usar el HGETdominio. devuelve un nil respuesta si el miembro especificado no existe.

Para agregar un nuevo miembro, simplemente use HINCRBY que actualizará el valor (es decir, el número de elementos con el nombre del miembro) o creará un nuevo miembro si no existe.


Conjunto ordenado

Para comprobar si hay un key existencia, use cualquiera de los tres comandos siguientes:

  • ZSCORE
  • ZRANK
  • ZREVRANK

regresan un nil respuesta si el miembro especificado no existe.

Para agregar un nuevo miembro, simplemente use ZINCRBY que actualizará la puntuación (es decir, el número de elementos con el nombre del miembro) o creará un nuevo miembro si no existe.


Para resumir: Conjuntos ordenados o tablas hash le permite realizar todas las operaciones con sus requisitos con un solo comando.

Me sorprende que nadie haya mencionado el colocarque resolvió perfectamente la pregunta.
Utilizando el miembro del sis key valor en colocarcomprueba si el valor es un miembro de la key.
Aquí está el ejemplo:

redis 127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "hello"
(integer) 1
redis 127.0.0.1:6379> SISMEMBER myset1 "world"
(integer) 0

Sección de Reseñas y Valoraciones

Te invitamos a añadir valor a nuestro contenido informacional contribuyendo tu veteranía en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *