快速入门

时间序列快速入门指南

安装设置

您可以在云端、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 起)您可以使用 GROUPBYREDUCE 选项按标签分组并应用附加聚合。

例如,要查找每个区域的最低温度,我们可以运行

TS.MRANGE - + FILTER region=(east,west) GROUPBY region REDUCE min
评价本页
返回顶部 ↑