快速入门
时间序列快速入门指南
安装设置
您可以在云端、Docker 容器中或您自己的机器上安装设置 Redis Time Series。
Redis Cloud
Redis Time Series 在所有 Redis Cloud 托管服务上均可用,包括一个完全免费的、最大 30MB 的托管数据库。
Docker
要快速试用 Redis Time Series,请使用 docker 启动一个 Redis 开源版实例
docker run -p 6379:6379 -it --rm redis/redis:latest
下载并运行二进制文件
首先从Redis 下载中心下载预编译版本。
接下来,使用 RedisTimeSeries 运行 Redis
$ redis-server --loadmodule /path/to/module/redistimeseries.so
自行构建和运行
您也可以在您自己的机器上构建和运行 RedisTimeSeries。
支持主要的 Linux 发行版以及 macOS。
要求
首先,从 git 克隆 RedisTimeSeries 仓库
git clone --recursive https://github.com/RedisTimeSeries/RedisTimeSeries.git
然后,要安装所需的构建产物,请调用以下命令
cd RedisTimeSeries
make setup
或者您可以手动安装system-setup.py 中列出的所需依赖项。
如果 make
尚不可用,以下命令是等效的
./deps/readies/bin/getpy3
./system-setup.py
请注意,system-setup.py
将在您的系统上安装各种软件包,使用原生包管理器和 pip。这在 Linux 上需要 root 权限(即 sudo)。
如果您想避免这种情况,可以
- 查看 system-setup.py 并手动安装软件包,
- 使用 Python 虚拟环境,
- 使用带有
--volume
选项的 Docker 来创建隔离的构建环境。
构建
make build
二进制构建产物放在 bin
目录下。
运行
在您的 redis-server 中运行: loadmodule bin/redistimeseries.so
有关模块的更多信息,请参阅redis 官方文档。
使用 redis-cli
试一试
安装设置好 RedisTimeSeries 后,您可以使用 redis-cli 与其交互。
$ redis-cli
127.0.0.1:6379> TS.CREATE sensor1
OK
创建时间序列
可以使用TS.CREATE
命令创建一个新的时间序列;例如,要创建名为 sensor1
的时间序列,请运行以下命令
TS.CREATE sensor1
您可以使用 RETENTION
选项设置样本相对于上次事件时间(以毫秒为单位)的最大保留时间,从而防止时间序列无限增长。保留的默认值为 0
,表示该系列不会被修剪。
TS.CREATE sensor1 RETENTION 2678400000
这将创建一个名为 sensor1
的时间序列,并将其修剪为最多一个月的数值。
添加数据点
要向时间序列添加新的数据点,我们使用TS.ADD
命令
TS.ADD key timestamp value
timestamp
参数是样本的 UNIX 时间戳(以毫秒为单位),value
是样本的数值数据值。
示例
TS.ADD sensor1 1626434637914 26
要添加带有当前时间戳的数据点,您可以使用 *
代替特定的时间戳
TS.ADD sensor1 * 26
您可以使用TS.MADD
命令同时向多个时间序列追加数据点
TS.MADD key timestamp value [key timestamp value ...]
删除数据点
可以使用TS.DEL
命令删除两个时间戳之间(包括)的数据点
TS.DEL key fromTimestamp toTimestamp
示例
TS.DEL sensor1 1000 2000
要删除单个时间戳,将其用作“from”和“to”时间戳
TS.DEL sensor1 1000 1000
注意: 当样本被删除时,所有下采样时间序列中的数据将针对特定 bucket 重新计算。但是,如果 bucket 的一部分因超出保留期已被删除,我们将无法重新计算整个 bucket,因此在这种情况下,我们将拒绝删除操作。
标签
标签是附加到数据点的键值元数据,允许我们进行分组和过滤。它们可以是字符串或数值,并在创建时间序列时添加。
TS.CREATE sensor1 LABELS region east
压缩
Redis Time Series 的另一个有用特性是通过创建压缩规则 (TS.CREATERULE
) 来压缩数据。例如,如果您一天收集了超过十亿个数据点,您可以按每分钟聚合数据进行下采样,从而将数据集大小减少到 24 * 60 = 1,440 个数据点。您可以选择众多可用的聚合类型之一,将特定分钟的多个数据点聚合成一个。当前支持的聚合类型包括:avg, sum, min, max, range, count, first, last, std.p, std.s, var.p, var.s and twa
。
需要指出的是,原始时间序列上不会发生数据重写;压缩发生在新的系列中,而原始系列保持不变。为了防止原始时间序列无限增长,您可以使用保留选项,它会将其修剪到特定时间段。
注意: 在创建规则之前,您需要创建目标(压缩后的)时间序列。
TS.CREATERULE sourceKey destKey AGGREGATION aggregationType bucketDuration
示例
TS.CREATE sensor1_compacted # Create the destination timeseries first
TS.CREATERULE sensor1 sensor1_compacted AGGREGATION avg 60000 # Create the rule
使用此创建规则,添加到 sensor1
时间序列的数据点将按 60 秒 (60000ms) 的 bucket 进行分组、平均,并保存在 sensor1_compacted
时间序列中。
过滤
您可以通过值、时间戳和标签过滤时间序列
按标签过滤
您可以在同一查询中检索来自多个时间序列的数据点,实现此目的的方法是使用标签过滤器。例如
TS.MRANGE - + FILTER area_id=32
此查询将显示所有带有标签 area_id
且值为 32
的传感器(时间序列)的数据。结果将按时间序列分组。
或者我们也可以使用TS.MGET
命令获取匹配特定过滤器的最后一个样本
TS.MGET FILTER area_id=32
按值过滤
我们可以跨单个或多个时间序列按值过滤
TS.RANGE sensor1 - + FILTER_BY_VALUE 25 30
此命令将返回所有值在 25 到 30 之间(包括 25 和 30)的数据点。
要在多个系列上实现相同的过滤,我们必须结合按值过滤和按标签过滤
TS.MRANGE - + FILTER_BY_VALUE 20 30 FILTER region=east
按时间戳过滤
要检索一个或多个时间序列上特定时间戳的数据点,我们可以使用 FILTER_BY_TS
参数
过滤单个时间序列
TS.RANGE sensor1 - + FILTER_BY_TS 1626435230501 1626443276598
过滤多个时间序列
TS.MRANGE - + FILTER_BY_TS 1626435230501 1626443276598 FILTER region=east
聚合
可以通过利用聚合函数来组合一个或多个时间序列的值
TS.RANGE ... AGGREGATION aggType bucketDuration...
例如,要在我们的 sensor1
系列中查找每小时的平均温度,我们可以运行
TS.RANGE sensor1 - + + AGGREGATION avg 3600000
要在 id 为 32 的区域中的多个传感器上实现同样的功能,我们可以运行
TS.MRANGE - + AGGREGATION avg 3600000 FILTER area_id=32
聚合 bucket 对齐
进行聚合时,聚合 bucket 将按如下方式与 0 对齐
TS.RANGE sensor3 10 70 + AGGREGATION min 25
Value: | (1000) (2000) (3000) (4000) (5000) (6000) (7000)
Timestamp: |-------|10|-------|20|-------|30|-------|40|-------|50|-------|60|-------|70|--->
Bucket(25ms): |_________________________||_________________________||___________________________|
V V V
min(1000, 2000)=1000 min(3000, 4000)=3000 min(5000, 6000, 7000)=5000
我们将得到以下数据点:1000、3000、5000。
您可以选择将 bucket 与查询区间的开始或结束对齐,如下所示
TS.RANGE sensor3 10 70 + AGGREGATION min 25 ALIGN start
Value: | (1000) (2000) (3000) (4000) (5000) (6000) (7000)
Timestamp: |-------|10|-------|20|-------|30|-------|40|-------|50|-------|60|-------|70|--->
Bucket(25ms): |__________________________||_________________________||___________________________|
V V V
min(1000, 2000, 3000)=1000 min(4000, 5000)=4000 min(6000, 7000)=6000
结果数组将包含以下数据点:1000、4000 和 6000
跨时间序列聚合
默认情况下,多个时间序列的结果将按时间序列分组,但(自 v1.6 起)您可以使用 GROUPBY
和 REDUCE
选项按标签分组并应用附加聚合。
例如,要查找每个区域的最低温度,我们可以运行
TS.MRANGE - + FILTER region=(east,west) GROUPBY region REDUCE min