Это необходимо, потому что мои запросы основаны на отметке времени, например: возвращаются все задания, которые выполнялись между отметками времени x и y.
Взгляните на Sorted Set Time Series Шаблон в шаблонах временных рядов Redis. Подробности можно найти здесь . Возможно, вам придется немного подправить пример, чтобы удовлетворить ваши потребности. Выдержка из do c:
+---------------+-------------+
| Timestamp | Temperature |
+---------------+-------------+
| 1511533205001 | 21 |
+---------------+-------------+
| 1511533206001 | 22 |
+---------------+-------------+
Вы можете сделать запрос следующим образом:
> ZADD temperature 1511533205001 21
(integer) 1
> ZADD temperature 1511533206001 22
(integer) 1
> ZRANGEBYSCORE temperature -inf +inf WITHSCORES
1) "22"
2) "1511533206001"
3) "21"
4) "1511533207001"
Это простой пример. В ссылке обсуждается расширение этого подхода для обработки конкретного c углового случая.
В вашем случае, учитывая, что у вас есть jobStartTime
и jobEndTime
, вам, возможно, придется использовать отдельные наборы для jobStarts
и jobEnds
, заданные меткой времени, в которую задание было запущено / завершено. Тогда:
Пусть x
обозначает начало, а y
обозначает конец задания
- Запрашивает все задания, которые были запущены после
x
из jobStarts
set - Запрос всех заданий, выполненных до
y
, но запущенных после x
из jobsEnds
set - Повторные значения по результатам шагов 1 и 2 дают задания, которые были запущены после
x
и закончился раньше y
В вашем коде:
public class Job {
private final List<Timestamp> jobStartTimes = new SortedList<>();
private final List<Timestamp> jobEndTimes = new SortedList<>();
....
private String jobKey;
....
}
вы сохраняете все прогоны как часть задания. Лучше отделить выполнение заданий отдельно от задания, чтобы сведения о задании могли кэшироваться отдельно в наборе, называемом jobs
. Тогда значения наборов jobStarts
и jobEnds
могут быть заданием JobKey, с помощью которого вы можете просмотреть детали из набора jobs
, который отдельно хранит сведения о задании.