Redis
 sql >> Database >  >> NoSQL >> Redis

Ottieni l'indice di un elemento per valore in un elenco redis

Non conosco i dettagli del client nodejs per questo, ma quanto segue è un'implementazione di un comando indexOf molto semplice in lua.

In un mio file indexof.lua ho il seguente codice:

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

Inseriamo alcuni valori in una mylist .

> rpush mylist foo bar baz qux
(integer) 4

Possiamo usare lo script lua per trovare l'indice di qualsiasi valore all'interno dell'elenco. Il comando è O(N).

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

indice di bar era 1

> lindex mylist 1
"bar"

indice di nil è -1

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

Guarda la http://redis.io/commands/eval ulteriore documentazione sul comando EVAL.