Можно ли использовать LRANGE в массиве rejson?

У меня есть Redis-сервер с rejson и я хочу получить часть вложенного массива.

Массив продолжает увеличиваться, потому что я добавляю данные в фоновом режиме. Но мне нужна не вся информация, а только ее часть. Но, кажется, нет ни JSON.ARRRANGE, ни "LRANGE", ни чего-то подобного. Есть ли другой способ архивировать это?

Пример структуры объекта:

{ 
 cars:
[
      {company: "Ford", timestamp:"123133131" },
      {company: "Mercedes", timestamp:"12165433131" },
],
 planes: 
[
      {company: "Foo", timestamp:"3123213114"},
      {company: "Bar", timestamp:"3123213114"},
]
}

Я хотел бы получить доступ к массиву автомобилей, но только к его части, скажем, к последним 300.

Я новичок в Redis, поэтому, возможно, можно как-то «запросить» данные.

Большое спасибо!


person user3306721    schedule 12.07.2019    source источник


Ответы (2)


Вы можете добиться этого с небольшими изменениями в том, как вы храните свои данные. 1/ Храните автомобили, самолеты и т. д. в отдельных списках Redis. поэтому для ключевых «автомобилей» ваш список Redis будет выглядеть так:

[
      {company: "Ford", timestamp:"123133131" },
      {company: "Mercedes", timestamp:"12165433131" },
        ………………. MORE CARS …………
],

аналогично отдельный СПИСОК для самолетов.

2/ Теперь всякий раз, когда вы добавляете элемент в СПИСОК автомобилей с помощью LPUSH, вы можете выполнить LTRIM до N, чтобы в списке были только самые последние N записей.

Вы даже можете оптимизировать количество операций LTRIM (вместо того, чтобы делать это каждый раз после LPUSH для добавления элемента): https://stackoverflow.com/a/37875025/533399

person DhruvPathak    schedule 12.07.2019
comment
Поскольку Итамар предположил, что полная поддержка JSONPath появится в RedisJSON, вы можете получить первую бета-версию здесь github.com/RedisJSON/RedisDoc< /а> - person Guy Korland; 16.07.2019

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

person Itamar Haber    schedule 12.07.2019
comment
Поддерживается ли он в последней версии RedisJSON? - person User3250; 29.12.2020