Redis получает первые элементы многих ключей LIST - PullRequest
0 голосов
/ 31 января 2019

Есть ли способ получить множество первых элементов (в разных ключах) списка?

так

K1 = [1,2,3,4]
K2 = [19, 24]

> XXXX K1, K2 ==> [1, 19]

и для несуществующих списков это должно указывать как-то так:

K1 = [1,2,3,4]
K2 = [19, 24]

> XXXX K1, K3, K2 ==> [1, None, 19]

Допустим, у меня есть 2000 ключей, которые мне нужно обновить, и я не хочу делать 2000 запросов.Я также не могу получить все 2000 полных значений, потому что списки длинные (скажем, длина 500)

1 Ответ

0 голосов
/ 31 января 2019

Вы бы сделали это количество запросов, по одному для каждого ключа списка.Однако рабочий процесс можно оптимизировать с помощью конвейерной обработки или Lua-скрипта :

$ redis-cli RPUSH K2 19 24
(integer) 2
$ redis-cli RPUSH K1 1 2 3 4
(integer) 4
$ redis-cli --eval mlrange.lua K1 K3 K2
1) "1"
2) (nil)
3) "19"
$ cat mlrange.lua
local reply = {}
for _, key in ipairs(KEYS) do
    local elems = redis.call('LRANGE', key, 0, 0)
    if elems then
        reply[#reply+1] = elems[1]
    else
        reply[#reply+1] = false
    end
end
return reply
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...