Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Obter o índice de um item por valor em uma lista redis


Eu não conheço os detalhes do cliente nodejs para isso, mas o seguinte é uma implementação de um comando indexOf muito simples em lua.

Em meu arquivo indexof.lua eu tenho o seguinte 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

Vamos enviar alguns valores para uma mylist .
> rpush mylist foo bar baz qux
(integer) 4

Podemos usar o script lua para encontrar o índice de qualquer valor dentro da lista. O comando é O(N).
$ redis-cli --eval indexof.lua mylist , bar
(integer) 1

índice de bar era 1
> lindex mylist 1
"bar"

índice de nil é -1
$ redis-cli --eval indexof.lua mylist , nil
(integer) -1

Consulte a http://redis.io/commands/eval documentação adicional sobre o comando EVAL.