Awesome
redistimeseries-js
JavaScript client for RedisTimeSeries
npm install redistimeseries-js
Example
const RedisTimeSeries = require('redistimeseries-js');
// check base redis client for options
// https://github.com/NodeRedis/node_redis
const options = {
host: 'localhost',
port: 6379
}
const rtsClient = new RedisTimeSeries(options);
const key = 'temperature';
const updateTemperature = async () => {
await rtsClient.add(key, Date.now(), Math.floor(Math.random()*30)).send();
}
const start = async () => {
await rtsClient.connect();
await rtsClient.create(key).retention(60000).send();
setInterval(updateTemperature, 1000);
}
start();
Filtering
Filters are represented as array of conditions
const { Filter } = require('redistimeseries-js');
const myFilter = [
Filter.equal('area_id', 32),
Filter.notEqual('sensor_id', 1),
Filter.exists('sub_area_id'),
Filter.notExists('outdoor'),
Filter.in('secitons', [2, 3, 4]),
Filter.notIn('secitons', [5, 6])
];
Aggregation
Possible aggregation values
const { Aggregation } = require('redistimeseries-js');
// Aggregation.AVG
// Aggregation.SUM
// Aggregation.MIN
// Aggregation.MAX
// Aggregation.RANGE
// Aggregation.COUNT
// Aggregation.FIRST
// Aggregation.LAST
// Aggregation.STDP
// Aggregation.STDS
// Aggregation.VARP
// Aggregation.VARS
Duplicate Policy
Possible duplicate policy values
const { DuplicatePolicy } = require('redistimeseries-js');
// DuplicatePolicy.BLOCK
// DuplicatePolicy.FIRST
// DuplicatePolicy.LAST
// DuplicatePolicy.MIN
// DuplicatePolicy.MAX
// DuplicatePolicy.SUM
Methods
Examples for each method are shown below, notice that optional parameters are always represented as object which is the last argument in the methods.
create
// TS.CREATE temperature:2:32 RETENTION 60000 LABELS sensor_id 2 area_id 32 UNCOMPRESSED
const RedisTimeSeries = require('redistimeseries-js');
const { DuplicatePolicy } = RedisTimeSeries;
client
.create('temperature:2:32')
.retention(60000)
.labels({ sensor_id: 2, area_id: 32 })
.duplicatePolicy(DuplicatePolicy.LAST)
.uncompressed()
.send();
alter
// TS.ALTER temperature:2:32 LABELS sensor_id 2 area_id 32 sub_area_id 15
client
.alter('temperature:2:32')
.labels({ sensor_id: 2, area_id: 32, sub_area_id: 15 })
.send();
add
// TS.ADD temperature:2:32 1548149180000 26 LABELS sensor_id 2 area_id 32
const RedisTimeSeries = require('redistimeseries-js');
const { DuplicatePolicy } = RedisTimeSeries;
client
.add('temperature:2:32', 1548149180000, 26)
.onDuplicate(DuplicatePolicy.SUM)
.labels({ sensor_id: 2, area_id: 32 })
.send();
// TS.ADD temperature:3:11 1548149183000 27 RETENTION 3600
client
.add('temperature:2:32', 1548149180000, 26)
.retention(3600)
.send();
madd
// TS.MADD temperature:2:32 1548149180000 26 cpu:2:32 1548149183000 54
client
.madd([
{ key: 'temperature:2:32', timestamp: 1548149180000, value: 26 },
{ key: 'cpu:2:32', timestamp: 1548149183000, value: 54 }
]);
.send();
incrBy
// TS.INCRBY temperature:2:32 3 RETENTION 30000
client
.incrBy('temperature:2:32', 3)
.retention(30000)
.send();
decrBy
// TS.DECRBY temperature:2:32 5 RETENTION 30000 UNCOMPRESSED
client
.decrBy('temperature:2:32', 5)
.retention(30000)
.uncompressed()
.send();
createRule
// TS.CREATERULE temperature:2:32 temperature:avg AGGREGATION avg 60000
const RedisTimeSeries = require('redistimeseries-js');
const { Aggregation } = RedisTimeSeries;
// ...
client
.createRule('temperature:2:32', 'temperature:avg')
.aggregation(Aggregation.AVG, 60000)
.send();
deleteRule
// TS.DELETE temperature:2:32 temperature:avg
client.deleteRule('temperature:2:32', 'temperature:avg').send();
range
// TS.RANGE temperature:3:32 1548149180000 1548149210000 AGGREGATION avg 5000
// TS.REVRANGE temperature:3:32 1548149180000 1548149210000 AGGREGATION avg 5000
const RedisTimeSeries = require('redistimeseries-js');
const { Aggregation } = RedisTimeSeries;
// ...
client
.range('temperature:2:32', 1548149180000, 1548149210000)
.aggregation(Aggregation.AVG, 5000)
.send();
mrange
// TS.MRANGE 1548149180000 1548149210000 AGGREGATION avg 5000 FILTER area_id=32 sensor_id!=1
// TS.MREVRANGE 1548149180000 1548149210000 AGGREGATION avg 5000 FILTER area_id=32 sensor_id!=1
const RedisTimeSeries = require('redistimeseries-js');
const { Aggregation, Filter } = RedisTimeSeries;
// ...
client
.mrange('temperature:2:32', 1548149180000, 1548149210000)
.filter([
Filter.equal('area_id', 32),
Filter.notEqual('sensor_id', 1)
])
.aggregation(Aggregation.AVG, 5000)
.send();
// TS.MRANGE 1548149180000 1548149210000 AGGREGATION avg 5000 WITHLABELS FILTER area_id=32 sensor_id!=1
// TS.MREVRANGE 1548149180000 1548149210000 AGGREGATION avg 5000 WITHLABELS FILTER area_id=32 sensor_id!=1
const RedisTimeSeries = require('redistimeseries-js');
const { Aggregation, Filter } = RedisTimeSeries;
// ...
client
.mrevrange('temperature:2:32', 1548149180000, 1548149210000)
.aggregation(Aggregation.AVG, 5000)
.withLabels()
.filter([
Filter.equal('area_id', 32),
Filter.notEqual('sensor_id', 1)
])
.send();
get
// TS.GET temperature:2:32
client
.get('temperature:2:32')
.send();
mget
// TS.MGET FILTER area_id=32
const RedisTimeSeries = require('redistimeseries-js');
const { Filter } = RedisTimeSeries;
// ...
client
.mget()
.filter([ Filter.equal('area_id', 32) ])
.send();
info
// TS.INFO temperature:2:32
client
.info('temperature:2:32')
.send();
queryIndex
// TS.QUERYINDEX sensor_id=2
client
.queryIndex([ Filter.equal('sensor_id', 2) ])
.send();