У меня есть список redis, который я создал, я использую его как очередь в момент, который меняет время от времени. Моя проблема в том, что я хотел бы получить индекс элемента в этой очереди/списке по значению.Получить индекс элемента по значению в списке redis
Пример
Если у меня есть список со следующими значениями:
{"dan","eduardo","pedro"}
Индексы будут:
0 : "dan"
1 : "eduardo"
2 : "pedro"
Я хочу, чтобы иметь возможность, передавая значения чтобы получить индекс этого значения в моем списке.
Как «eduardo» и верните «1».
Возможно ли это, если да, как бы вы это сделали?
Также я должен сказать, что я выполняю команды очереди в свой список, удаляя элементы сверху и добавляя их внизу.
В настоящее время я использую node.js 0.6.6 и последний модуль redis с последней версией версии 2.4.4.
Я рад за решение только в redis-cli.
Кроме того, нет ограничений, кроме того, это должно быть возможно сделать с помощью redis в отдельности, без внешнего процесса и т. Д. Однако, если вы хотите использовать команду EVAL с lua для этого.
Редактировать
Кроме того, я думаю, что мой ответ может быть отсортированные наборы не очередей.
Это интересный пример использования Lua. Однако стоимость - это полная копия списка, а также линейный поиск в Lua. Он может применяться только к небольшим спискам. Для больших списков он задерживает цикл Redis в течение нескольких секунд и потребляет слишком много памяти. –
Это зависит от приложения, если решение, данное в этом ответе, является хорошим выбором. Учитывая описание вопроса, нет никаких указаний на то, насколько велика или мала очередь. Чтобы иметь более низкую накладную память, нам нужно использовать другой алгоритм поиска, и для этого список нужно упорядочить по значению. Кроме того, я думаю, что использование zrank и отсортированных наборов звучит как лучшее решение, если это операция, выполняемая в большом списке элементов. –
Длина очереди может достигать 10000 единиц. и он изменяется, то есть элементы получают разблокировку и ставят в очередь каждые 200 миллисекунд. – dmportella