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:
- Utilizando
LREM
y reemplazándolo si se encuentra. - manteniendo una separación
SET
junto con suLIST
- 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 MULTI
–EXEC
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 HGET
dominio. 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.