Не знам подробностите за клиента на nodejs за това, но по-долу е реализация на много проста команда indexOf в lua.
В моя файл indexof.lua
имам следния код:
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
Нека да изпратим няколко стойности към mylist
.
> rpush mylist foo bar baz qux
(integer) 4
Можем да използваме lua скрипта, за да намерим индекса на всяка стойност в списъка. Командата е O(N).
$ redis-cli --eval indexof.lua mylist , bar
(integer) 1
индекс на bar
беше 1
> lindex mylist 1
"bar"
индекс на nil
е -1
$ redis-cli --eval indexof.lua mylist , nil
(integer) -1
Вижте http://redis.io/commands/eval допълнителна документация за командата EVAL.