Skip to content

Commit 68c78f3

Browse files
committed
Add support for TS.REVRANGE
1 parent 823a245 commit 68c78f3

4 files changed

Lines changed: 42 additions & 2 deletions

File tree

redistimeseries/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ TS.DECRBY | RedisTimeSeries.<br/>decrBy()<br/>decrByAsync() |
1313
TS.CREATERULE | RedisTimeSeries.<br/>createRule()<br/>createRuleAsync() |
1414
TS.DELETERULE | RedisTimeSeries.<br/>deleteRule()<br/>deleteRuleAsync() |
1515
TS.RANGE | RedisTimeSeries.<br/>range()<br/>rangeAsync() |
16+
TS.REVRANGE | RedisTimeSeries.<br/>revRange()<br/>revRangeAsync() |
1617
TS.MRANGE | RedisTimeSeries.<br/>mrange()<br/>mrangeAsync() |
1718
TS.GET | RedisTimeSeries.<br/>get()<br/>getAsync() |
1819
TS.MGET | RedisTimeSeries.<br/>mget()<br/>mgetAsync() |
1920
TS.INFO | RedisTimeSeries.<br/>info()<br/>infoAsync() |
20-
TS.QUERYINDEX | RedisTimeSeries.<br/>queryIndex()<br/>queryIndexAsync() |
21+
TS.QUERYINDEX | RedisTimeSeries.<br/>queryIndex()<br/>queryIndexAsync() |

redistimeseries/src/main/java/io/github/dengliming/redismodule/redistimeseries/RedisTimeSeries.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import static io.github.dengliming.redismodule.redistimeseries.protocol.RedisCommands.TS_MRANGE;
4343
import static io.github.dengliming.redismodule.redistimeseries.protocol.RedisCommands.TS_QUERYINDEX;
4444
import static io.github.dengliming.redismodule.redistimeseries.protocol.RedisCommands.TS_RANGE;
45+
import static io.github.dengliming.redismodule.redistimeseries.protocol.RedisCommands.TS_REVRANGE;
4546

4647
/**
4748
* @author dengliming
@@ -263,6 +264,33 @@ public RFuture<List<Value>> rangeAsync(String key, long from, long to, RangeOpti
263264
return commandExecutor.readAsync(getName(), StringCodec.INSTANCE, TS_RANGE, args.toArray());
264265
}
265266

267+
/**
268+
* Query a range in reverse direction.
269+
*
270+
* @param key
271+
* @param from
272+
* @param to
273+
* @return
274+
*/
275+
public List<Value> revRange(String key, long from, long to) {
276+
return this.revRange(key, from, to, null);
277+
}
278+
279+
public List<Value> revRange(String key, long from, long to, RangeOptions rangeOptions) {
280+
return commandExecutor.get(revRangeAsync(key, from, to, rangeOptions));
281+
}
282+
283+
public RFuture<List<Value>> revRangeAsync(String key, long from, long to, RangeOptions rangeOptions) {
284+
List<Object> args = new ArrayList<>();
285+
args.add(key);
286+
args.add(from);
287+
args.add(to);
288+
if (rangeOptions != null) {
289+
rangeOptions.build(args);
290+
}
291+
return commandExecutor.readAsync(getName(), StringCodec.INSTANCE, TS_REVRANGE, args.toArray());
292+
}
293+
266294
/**
267295
* Query a timestamp range across multiple time-series by filters.
268296
*

redistimeseries/src/main/java/io/github/dengliming/redismodule/redistimeseries/protocol/RedisCommands.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,5 @@ public interface RedisCommands {
4646
RedisCommand TS_MGET = new RedisCommand<>("TS.MGET", new ListMultiDecoder2(new TimeSeriesDecoder(), new CodecDecoder(), new CodecDecoder(), new CodecDecoder()));
4747
RedisCommand TS_INFO = new RedisCommand<>("TS.INFO", new ListMultiDecoder2(new ObjectMapReplayDecoder(), new ObjectListReplayDecoder<>(), new ObjectListReplayDecoder<>()));
4848
RedisCommand TS_QUERYINDEX = new RedisCommand<>("TS.QUERYINDEX", new StringListReplayDecoder());
49-
49+
RedisCommand TS_REVRANGE = new RedisCommand<>("TS.REVRANGE", new ListMultiDecoder2(new ObjectListReplayDecoder<>(), new ValueDecoder()));
5050
}

redistimeseries/src/test/java/io/github/dengliming/redismodule/redistimeseries/RedisTimeSeriesTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,17 @@ public void testRange() {
138138

139139
List<Value> values = redisTimeSeries.range("temperature:2:33", timestamp, timestamp + 1);
140140
assertThat(values).hasSize(2);
141+
assertThat(values.get(0).getTimestamp()).isEqualTo(timestamp);
142+
assertThat(values.get(0).getValue()).isEqualTo(13);
143+
assertThat(values.get(1).getTimestamp()).isEqualTo(timestamp + 1);
144+
assertThat(values.get(1).getValue()).isEqualTo(26);
145+
146+
values = redisTimeSeries.revRange("temperature:2:33", timestamp, timestamp + 1);
147+
assertThat(values).hasSize(2);
148+
assertThat(values.get(0).getTimestamp()).isEqualTo(timestamp + 1);
149+
assertThat(values.get(0).getValue()).isEqualTo(26);
150+
assertThat(values.get(1).getTimestamp()).isEqualTo(timestamp);
151+
assertThat(values.get(1).getValue()).isEqualTo(13);
141152

142153
List<TimeSeries> timeSeries = redisTimeSeries.mrange(timestamp, timestamp + 1, new RangeOptions()
143154
.max(3).withLabels(), "sensor_id=2");

0 commit comments

Comments
 (0)