Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Rufen Sie den Index eines Elements nach Wert in einer Redis-Liste ab

Ich kenne die Nodejs-Client-Details dafür nicht, aber das Folgende ist eine Implementierung eines sehr einfachen indexOf-Befehls in lua.

In einer meiner Datei indexof.lua Ich habe den folgenden Code:

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

Lassen Sie uns ein paar Werte in eine mylist verschieben .

> rpush mylist foo bar baz qux
(integer) 4

Wir können das Lua-Skript verwenden, um den Index eines beliebigen Werts in der Liste zu finden. Der Befehl lautet O(N).

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

Index von bar war 1

> lindex mylist 1
"bar"

Index von nil ist -1

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

Sehen Sie sich die http://redis.io/commands/eval weitere Dokumentation zum EVAL-Befehl an.