Переделка структуры Redis как № SQL для поиска по значению, решение предлагает записать один объект набора ключей?
Моя первоначальная проблема как «найти все ключи по значению» в Redis. И, к моему удивлению, это невозможно, как кажется, или это не лучший вариант, учитывая использование Redis.
Поиск в SO, я нашел этот вопрос Найти ключ по значению ответ на него это подход к перестройке структуры.
Мой сценарий
У меня есть ключи, которые случайным образом UUID
сгенерированы в коде, который хранит значение boolean
. UUID
представляет идентификатор запроса для приложения, которое вернет успех этого запроса после обработки. Затем мое приложение будет хранить этот идентификатор запроса до тех пор, пока он не будет обработан - есть некоторая функция повторной публикации, если по истечении 2 минут не происходит ответа для этого идентификатора запроса.
Итак, данные, хранящиеся в Redis, выглядят так:
44f672a0-36da-4906-9fa0-d3ee0b0f1989 true
33749e7e-5e62-4340-8914-cb9f6eed6111 false
and so on...
В какой-то момент моего кода я должен найти все необработанные ключи. Что является проблемой с этой структурой, мне нужно scan
все ключи и для каждого ключа найти связанное значение. Это похоже на два запроса на ключ - не очень хороший подход.
Сценарий решения
Итак, согласно этому вопросу и ответу я должен сохранить единственный ключ с именем false
с набором значений, которые являются моим идентификатором запроса. Это будет выглядеть так:
false [33749e7e-5e62-4340-8914-cb9f6eed6111, 36b1eb8f-1576-49e7-a95a-ab852cc2624d ...]
Итак, здесь мы решили задачу поиска по значению. Поскольку у меня всего один ключ false
, я обнаружил, что все не обработанные ключи.
Но теперь мне нужно обновлять этот установленный ключ все время, когда я получаю запрос на успешную обработку вместо deleting
один ключ.
Может ли этот сценарий набора обновлений быть проблемой производительности?
Идея не в том, чтобы иметь большой необработанный идентификатор запроса. Этот набор должен быть небольшим по размеру и иметь значения
Я думаю, что это проблема дизайна, а не проблема драйвера или кода, но я использую Java с Jedis для связи с Redis.