Tengo una lista de redis que he creado, la estoy usando como una cola en el momento que se invierte de vez en cuando. Mi problema es que me gustaría poder obtener el índice de un elemento en esa cola/lista por valor.Obtener el índice de un artículo por valor en una lista redis
Ejemplo
Si tengo una lista con los siguientes valores:
{"dan","eduardo","pedro"}
Los índices serían:
0 : "dan"
1 : "eduardo"
2 : "pedro"
quieren ser capaces mediante el paso en el valor para obtener el índice de ese valor en mi lista.
Me gusta "eduardo" y get back '1'.
¿Es posible si es así cómo lo haría?
También algo que debo decir es que estoy ejecutando comandos de cola en mi lista, eliminando elementos de la parte superior y agregándolos en la parte inferior.
Actualmente estoy usando node.js 0.6.6 y el último módulo de redis con la última versión de redis 2.4.4.
Estoy contento por la solución solo en redis-cli.
Además, no hay ninguna otra restricción, entonces debe ser posible hacerlo con redis solo, sin proceso externo, etc. Sin embargo, si desea utilizar el comando EVAL con lua, haga clic en él.
Editar
También creo que mi respuesta podría estar en conjuntos ordenados no pone en cola.
Este es un ejemplo interesante del uso de Lua. Sin embargo, el costo es una copia completa de la lista, más una búsqueda lineal en Lua. Solo se puede aplicar en listas pequeñas. Para listas grandes, congelará el ciclo Redis durante varios segundos y consumirá demasiada memoria. –
Depende de la aplicación si la solución dada en esta respuesta es una buena opción. Dada la descripción de la pregunta, no hay indicios de cuán grande o pequeña es la cola. Para tener una sobrecarga de memoria menor, necesitamos usar un algoritmo de búsqueda diferente, y para hacer eso, la lista debe ordenarse por valor. Además, creo que usar conjuntos discontinuos y ordenados suena como una mejor solución si se trata de una operación realizada en una gran lista de elementos. –
La cola puede tener hasta 10000 elementos. y cambia, es decir, los artículos se quitan de la cola y se enrutan cada 200 milisegundos. – dmportella