Справочная информация
Мне нужно запросить значение, используя ключ, но ключ должен быть оценен в определенном порядке приоритета, где порядок:
- если точное совпадение существует, используйте значение, связанное с соответствующим ключом
- , если ключ попадает в диапазон ключей, определенных в БД, используйте значение, связанное с этим диапазоном.
- если нет соответствующего ключа, используйте значение по умолчанию
Чтобы лучше объяснить проблему, я нарисую хеш-код, подобный следующему:
'northam' hash
key value
=====================
12345 abc
default ddd
2000[0-10] bbb
Используя вышеупомянутую конструкцию хранилища, Мне нужно иметь возможность:
- для запроса с использованием ключа 12345 и иметь db return abc, потому что он нашел точное совпадение.
- Если я запрашиваю с использованием ключа '33333', тогда япросто хочу вернуть значение DDD, связанное с ключом «по умолчанию», так как у меня нет ключа / значения для 33333.
- Если я запрашиваю, используя ключ '2000' или '2004', я хочу найти егозначение bbb.
Вопрос
В REDIS можно ликак-нибудь создать ключ типа '2000 [0-10]'?
Есть ли лучший способ сделать это?Я знаю, что могу программно расширить 2000 [0-10] и сохранить каждое значение в виде отдельной записи в таблице.Но если пользователь обновит этот диапазон и изменит его на 2000 [15-21], тогда очистка будет немного грязной.
Что я уже пробовал
Я играл с отсортированными сетами?Я не совсем понимаю, как они работают.Но до сих пор я пробовал что-то вроде этого:
127.0.0.1:6379[1]> zadd northam 2000 ddd 2002 ddd
(integer) 1
127.0.0.1:6379[1]>
И теперь я пытаюсь выяснить, могу ли я запросить 2000 (или любое другое значение в диапазоне 2000-2010) и получить"ДДД" назад.но это не работает
РЕДАКТИРОВАТЬ 1
Итак, после прочтения немного об индексировании / вторичных индексах, это структура данных прототипа, с которой я играл:
127.0.0.1:6379[3]> zadd northamerica 0 2000:2010:1234512345
(integer) 1
127.0.0.1:6379[3]> zadd northamerica 0 2011:2014:00000000000
(integer) 1
Первая запись, я пытаюсь сказать, что начальный номер в моем диапазоне - 2000, а конечный номер - 2010. Для любых чисел, попадающих в этот диапазон, используйте значение 1234512345 Но теперь мне нужно знать, каквыполнить запрос.Так, например, если пользователь запрашивает, какое значение использовать для ключа «2009», я не знаю, как выполнить запрос к этой структуре, чтобы найти, что он должен использовать 1234512345
РЕДАКТИРОВАТЬ 2
Итак, в конце я думаю, что решил использовать лексикографический индекс, как показано выше, а затем внедрить логику в само приложение для интерпретации.Так, например,
127.0.0.1:6379[3]> zrange northamerica 0 -1
1) "2000:2010:12312312345"
2) "2011:2014:00000000000"
3) "2015:2015:11111111111"
127.0.0.1:6379[3]>
Приложение может запрашивать все записи для Северной Америки, а затем, когда оно возвращает указанный выше список, оно может разделить (на массивы) каждую запись с помощью ":", чтобы определить, какие диапазоны существуют,