Получить диапазон элементов из Redis с помощью ReJSON

Итак, внутри json у нас есть ключ с именем items, который на самом деле содержит массив элементов, теперь мы можем получить выборочный индекс из этого массива, используяJSON.GET employees-list .items[1].

Но в нашем случае нам нужно получить диапазон из этого массива, например, элементы с индексами 0-10, 10-20 и т. Д. Для целей разбивки на страницы, чтобы нам не приходилось получать все данные в коде, а затем фильтровать результаты.

Причина, по которой я его ищу, потому что, если мы читаем весь список, тогда, поскольку размер данных будет огромным, задержка передачи данных увеличится, поскольку API, использующий его, и сервер redis не находятся в одном экземпляре, плюс имеет больше смысла не иметь если возможно, сделайте это в коде.

Итак, во-первых, это возможно, и если да, то как мы можем этого достичь?

1 ответ

Решение

RedisJSON не поддерживает полный синтаксис JSONPath и поддерживает только простые одиночные пути. Но вы можете использовать поддержку конвейера Redis для достижения достаточно хорошего результата, отправив следующие данные неблокирующим способом:

JSON.GET employees-list .items[1]
JSON.GET employees-list .items[2]
JSON.GET employees-list .items[3]

RedisJSON2, с другой стороны, имеет полную поддержку JSONPath и поддерживает такие запросы, но в настоящее время для обратной совместимости он возвращает только первый элемент (например, RedisJSON). Такая поддержка будет добавлена, вероятно, на следующей неделе.

Другие вопросы по тегам