sql >> Base de Datos >  >> NoSQL >> Redis

Obtenga el índice de un elemento por valor en una lista redis

No conozco los detalles del cliente de nodejs para esto, pero la siguiente es una implementación de un comando indexOf muy simple en lua.

En mi archivo indexof.lua tengo el siguiente código:

local key = KEYS[1]
local obj = ARGV[1]
local items = redis.call('lrange', key, 0, -1)
for i=1,#items do
    if items[i] == obj then
        return i - 1
    end
end 
return -1

Empujemos algunos valores a mylist .

> rpush mylist foo bar baz qux
(integer) 4

Podemos usar el script lua para encontrar el índice de cualquier valor dentro de la lista. El comando es O(N).

$ redis-cli --eval indexof.lua mylist , bar
(integer) 1

índice de bar era 1

> lindex mylist 1
"bar"

índice de nil es -1

$ redis-cli --eval indexof.lua mylist , nil
(integer) -1

Consulte la http://redis.io/commands/eval documentación adicional sobre el comando EVAL.