Получить диапазон элементов из 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). Такая поддержка будет добавлена, вероятно, на следующей неделе.