Что такое эквивалент Redis для getRange TransactionDB?
API-интерфейс транзакции DB Python говорит, что
Database.get_range(начало, конец [, лимит, обратный, streaming_mode])
Возвращает все ключи k, такие что begin <= k
Это чтение полностью синхронно.
Я хочу что-то подобное в Redis. Я посмотрел на функции Lrange и Zrange, но не думаю, что они похожи.
2 ответа
TL;DR не существует прямого эквивалента, и сканирование всего пространства ключей всегда медленное (э) - вы должны избегать его, если ваше намерение в любом случае не получить большинство / все ключи.
Есть две команды Redis, которые позволяют сканировать пространство клавиш - одна называется SCAN
а другой не должен упоминаться и использоваться ни для чего, кроме развития. Однако, в отличие от того, что вам нужно, эти команды:
1. Не работают с диапазонами клавиш, а работают с шаблонами, похожими на глобусы 2. Не возвращайте связанное значение, вы должны его специально прочитать
Вообще говоря, вы должны воздерживаться от практики таких шаблонов чтения, если вы не имеете это в виду - в большинстве случаев вы хотите, чтобы ответы были быстрыми и дешевыми, поэтому полное сканирование почти всегда не является правильным способом,
Сортированные наборы позволяют выполнять запросы по диапазону. Если вы храните, скажем, объект, вы можете использовать отсортированный набор, чтобы получить нужные идентификаторы объекта, а затем найти информацию об объекте из хеша с помощью hget/ hgetall.