commands - redis vs mongodb
Comprobando si existe un valor en una lista ya Redis (3)
Me pregunto si hay una forma de comprobar si una clave ya existe en una lista redis.
No puedo usar un conjunto porque no quiero aplicar la exclusividad, pero sí quiero poder verificar si la cadena está realmente allí.
Gracias.
No, no hay forma de verificar si una lista redis contiene un valor dado. Vea los comandos de la lista Redis para referencia.
Supongo que podría usar LREM
para (intentar) eliminar el valor y verificar el valor de retorno para ver si se eliminó. Pero entonces tendrías que volver a ponerlo, y parece dudoso. Probablemente haya una solución mejor para su problema: ¿qué está tratando de lograr?
Sus opciones son las siguientes:
- Usando
LREM
y reemplazándolo si fue encontrado. - Mantener un
SET
separado junto con suLIST
- Recorra la
LIST
hasta encontrar el elemento o llegar al final.
Las listas de Redis se implementan como una http://en.wikipedia.org/wiki/Linked_list , de ahí las limitaciones.
Creo que tu mejor opción es mantener un SET
duplicado. Esto es lo que tiendo a hacer. Solo piense en ello como un índice adicional. De todos modos, asegúrese de que sus acciones sean atómicas con los guiones MULTI
- EXEC
o Lua.
Las listas permiten duplicados, pero no proporcionan una forma simple de verificar la existencia y, como lo advirtió @Fritzy, usted necesita:
- Hacer operaciones múltiples (eliminar y luego agregar de nuevo se encuentra) para verificaciones simples = Costo en el tiempo
- Mantener un conjunto separado = Costo en la memoria
Me sorprende que nadie te sugiriera usar una tabla hash o un conjunto ordenado que combinen las ventajas de permitir la duplicidad (almacenando el número de elementos como valor - tabla Hash , o puntaje - conjunto ordenado ) e indexando miembros por naturaleza de un hash mesa puesta.
Tabla de picadillo
Para verificar la existencia de una clave, use el comando HGET
. Devuelve una respuesta nil
si el miembro especificado no existe.
Para agregar un nuevo miembro, simplemente use HINCRBY
que actualizará el valor (es decir, la cantidad de elementos con el nombre del miembro) o creará un nuevo miembro si no existe.
Conjunto ordenado
Para verificar la existencia de una clave, use cualquiera de los tres comandos siguientes:
-
ZSCORE
-
ZRANK
-
ZREVRANK
nil
una respuesta nil
si el miembro especificado no existe.
Para agregar un nuevo miembro, simplemente use ZINCRBY
que actualizará el puntaje (es decir, la cantidad de elementos con el nombre del miembro) o creará un nuevo miembro si no existe.
En resumen: los conjuntos ordenados o las tablas hash le permiten realizar todas las operaciones con sus requisitos con un solo comando .