Redis
 sql >> Base de données >  >> NoSQL >> Redis

Obtenir l'index d'un élément par valeur dans une liste redis

Je ne connais pas les détails du client nodejs pour cela, mais ce qui suit est une implémentation d'une commande indexOf très simple dans lua.

Dans un fichier mon indexof.lua j'ai le code suivant :

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

Poussons quelques valeurs dans une mylist .

> rpush mylist foo bar baz qux
(integer) 4

Nous pouvons utiliser le script lua pour trouver l'index de n'importe quelle valeur dans la liste. La commande est O(N).

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

index de bar était 1

> lindex mylist 1
"bar"

indice de nil vaut -1

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

Consultez la http://redis.io/commands/eval documentation complémentaire sur la commande EVAL.