缓存数据库 Redis 版基于开源 Redis TimeSeries 模块提供了 ExTimeSeries 数据结构。ExTimeSeries 支持通过指定字段实现快速过滤或聚合查询,简化时序数据处理过程的同时也极大提高了性能,满足了低时延、高并发内存读写访问场景下的业务需求。本文介绍缓存数据库 Redis 版的 ExTimeSeries 数据结构相关信息,包括功能原理,适用场景,以及具体的命令语法。
前提条件
- 实例的版本需同时满足如下要求才可使用 ExTimeSeries 数据结构:
- 数据库版本需为 Redis 7.0。
- Proxy 小版本需大于等于 1.502.0。
- Serve 小版本需大于等于 7.503.1。
说明
您可以在实例信息页签下查看实例的数据库版本和小版本信息,具体操作步骤,请参见查看实例信息。
- 实例状态需为运行中。关于实例状态的更多说明,请参见实例状态。
背景信息
功能原理
ExTimeSeries 数据结构简介
缓存数据库 Redis 版的 ExTimeSeries 是火山引擎在开源 Redis TimeSeries 的基础上,结合了多标签(Label)使用场景而扩展出的自研数据结构。ExTimeSeries 通过额外的一层 Hash 结构将时序数据的 Key 细分为了 Pkey 和 Skey,下表列出了缓存数据库 Redis 版 ExTimeSeries 数据结构的详细说明供您参考。
ExTimeSeries 数据结构 | 说明 |
---|
Pkey | 一个 Pkey 就是一组时间线,每个 Pkey 中可包含多个 Skey。 |
Skey
| 一个 Skey 就是一条时间线,每个 Skey 中可包含多个固定容量的 chunk。
缓存数据库 Redis 版支持为每个 Skey 设置不同的标签(Label),用于在海量数据中快速过滤出目标 Skey。 |
Chunk
| 时序数据的数据块,单个 CHUNK_SIZE 默认为 256。 - chunk 编码模式不同,
CHUNK_SIZE 的含义不同:
- 若编码模式为不压缩(即
ENCODING 为 UNCOMPRESSED ),CHUNK_SIZE 含义为每个 chunk 能存储的 Datapoint 数量,一个 Datapoint 的默认大小为 16 Byte。 - 若编码模式为压缩(即
ENCODING 为 COMPRESSED ),CHUNK_SIZE 含义为每个 chunk 的大小,单位:Byte。
CHUNK_SIZE 支持自定义,若不开启压缩,默认存储 256 个 Datapoint;若开启压缩,则能存储超过 256 个。- chunk 为最小的过期单元,即单个 chunk 中所有 Datapoint 都过期后才会删除该 chunk。
|
Datapoint | 时序数据的数据点,其中包含了一个时间戳和一个 value 数据(Double 类型)。 |
缓存数据库 Redis 版 ExTimeSeries 与开源 Redis Time series 数据结构示意图对比如下。
- 功能亮点
缓存数据库 Redis 版的 ExTimeSeries 具备如下功能亮点:
- 支持多时间线(Pkey)级别的聚合查询。
例如在金融市场分析场景中,需要监控每日股价波动并预测走势,那么您可以将股票(例如 Financial_product_stock
)作为 PKey,并为其创建以各项监控指标名称(例如当日收盘价 closing_price:A
、成交量 volume:A
等)与股票代码命名(例如 stockid:A
)的 Skey,然后通过 ExTimeSeries 自带的 EXTS.MRANGE 命令,即可快速获取股票代码为 A 的股价波动相关监控信息。而若使用开源 Redis TimeSeries,您需要在业务代码中通过大量聚合运算才能实现上述查询。 - 支持通过自定义采样间隔(timeBucket)、标签过滤(Filter)和常见数值函数等实现聚合查询,来减少网络交互,提高查询效率。
- 支持对指定时间点的时序数据进行增减操作。
- 支持为 Skey 设置过期时间(Retention time)属性,保证每条时间线上的数据都能按时间窗口自动清理。
- 支持高效压缩算法与特定存储技术相结合,降低存储成本。
适用场景
缓存数据库 Redis 版的 ExTimeSeries 数据结构适用于如下场景:
- 监控系统场景
大型数据中心需要对服务器性能指标进行实时监控,开发运维团队可借助 ExTimeSeries 实现快速存储与查询,协助开发人员及时发现性能问题和用户异常行为。 - 电商数据分析场景
ExTimeSeries 能够对电商网站的浏览量、商品点击量、购买数量等进行实时统计,并分析商品购买趋势,协助企业制定商品策略的调整方案。 - 金融风控场景
金融机构可运用 ExTimeSeries 对股票价格、交易量等高频时间敏感数据进行处理和分析,为金融分析师开展市场分析与风险评估工作提供数据支持。 - 物联网(IoT)场景
ExTimeSeries 能够在实时监测智能工厂设备的状态与性能方面发挥重要作用,通过对设备的异常检测、使用趋势分析等,对设备使用策略、维护和更换时间提供预测指导。
命令语法
命令列表
ExTimeSeries 支持的命令如下表所示。
说明
针对下表中的命令语法,定义如下:
大写关键字
:命令关键字,如 EXTS.PCREATE
。小写关键字
:可自定义的参数。[]
:[]
内的为可选参数,不在 []
内的为必选参数。<可选项 1>|<可选项 2>|<可选项 n>
:一组互斥的参数可选项,即仅支持从可选项中选择一个参数进行设置。
命令 | 语法 | 说明 |
---|
EXTS.PCREATE | EXTS.PCREATE Pkey | 创建一个新 Pkey(ExTimeSeries 数据结构),若 Pkey 已存在则创建失败。 |
EXTS.CREATE | EXTS.CREATE Pkey Skey [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 label2 val2 ...]
| 在指定的 Pkey 中创建一个 Skey,若 Pkey 不存在则会自动创建一个新 Pkey,若 Skey 已经存在则创建失败。
您可以在创建时为 SKey 设置过期时间、是否开启压缩、标签等属性。 |
EXTS.ALTER | EXTS.ALTER Pkey Skey [RETENTION time] | 修改指定 Pkey 中目标 Skey 的属性,当前仅支持修改过期时间(即 RETENTION time )。 |
EXTS.ADD | EXTS.ADD Pkey Skey timestamp value [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 ...] | 为指定 Pkey 中的目标 Skey 插入一条 Datapoint 数据。若 Pkey 或 Skey 不存在则会自动创建,Skey 的过期时间、是否开启压缩、标签等属性仅在需要自动创建 Skey 的情况下生效。 |
EXTS.MODIFY | EXTS.MODIFY Pkey Skey timestamp value [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 ...] | 修改目标 Skey 中 指定时间点的 Datapoint 数据值。若 Pkey 或 Skey 不存在则会自动创建,Skey 的过期时间、是否开启压缩、标签等属性仅在需要自动创建 Skey 的情况下生效。 |
EXTS.INCRBY | EXTS.INCRBY Pkey Skey timestamp value [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 ...] | 为指定 Pkey 中的目标 Skey 插入一条 Datapoint 数据,并将该命令中的 value 与目标 Skey 中时间最近的 Datapoint 所设 value 值相加实现递增。若您将命令中的 value 值指定为负数则实现递减。 |
EXTS.INCRBY_TS | EXTS.INCRBY_TS Pkey Skey timestamp value [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 ...] | 将该命令中的 value 与目标 Skey 中指定时间点的 Datapoint 所设 value 值相加实现递增。若您将命令中的 value 值指定为负数则实现递减。 |
EXTS.MADD | EXTS.MADD Pkey Skey timestamp value [Skey timestamp value ...]
| 为指定 Pkey 中的多个 Skey 分别插入一条 Datapoint 数据。 |
EXTS.MMODIFY | EXTS.MMODIFY Pkey Skey timestamp value [Skey timestamp value ...]
| 批量修改多个 Skey 中在指定时间点的 Datapoint 数据值。 |
EXTS.MINCRBY | EXTS.MINCRBY Pkey Skey timestamp value [Skey timestamp value ...]
| 为指定 Pkey 中的多个 Skey 分别插入一条 Datapoint 数据,并将该命令中的 value 与各个 Skey 中时间最近的 Datapoint 所设 value 值相加实现递增。若您将命令中的 value 值指定为负数则实现递减。 |
EXTS.MINCRBY_TS | EXTS.MINCRBY_TS Pkey Skey timestamp value [Skey timestamp value ...]
| 批量修改多个目标 Skey 中 Datapoint 的 value。该命令中的 value 会与目标 Skey 中指定时间点的 Datapoint 所设 value 值相加实现递增。若您将命令中的 value 值指定为负数则实现递减。 |
EXTS.DEL | EXTS.DEL Pkey Skey
| 删除指定 Pkey 中的目标 Skey,包括该 Skey 中所有的 Datapoint 数据。 说明 当 Pkey 中不存在任何 Skey 时,该 Pkey 会被自动删除。 |
命令 | 语法 | 说明 |
---|
EXTS.GET | EXTS.GET Pkey Skey | 查询指定 Pkey 的目标 Skey 中,时间最近的一条 Datapoint 数据。 |
EXTS.INFO | EXTS.INFO Pkey Skey | 查询指定 Pkey 中目标 Skey 的属性信息,包括 Datapoint 数量、最近一条 Datapoint 的时间戳与 value、Skey 的标签等信息。 |
EXTS.QUERYINDEX | EXTS.QUERYINDEX Pkey filter1 [filter2 ...] | 从指定 Pkey 中查询出符合自定义过滤条件(filter)的 Skey。 |
EXTS.RANGE | EXTS.RANGE Pkey Skey fromTimestamp toTimestamp [COUNT count] [AGGREGATION aggregationType timeBucket] | 在目标 Skey 中查询指定时间段内(即包含指定时间点)的 Datapoint 数据。 |
EXTS.MRANGE | EXTS.MRANGE Pkey fromTimestamp toTimestamp [COUNT count] [AGGREGATION aggregationType timeBucket] [WITHLABELS] FILTER filter1 [filter2 ...] | 在目标 Pkey 中查询指定时间段内(即包含指定时间点),符合符合自定义过滤条件(filter)的 Skey 信息详情,包括 Skey 名称、包含的标签、 Datapoint 数据。 |
EXTS.PRANGE | EXTS.PRANGE Pkey fromTimestamp toTimestamp pkeyAggregationType pkeyTimeBucket [COUNT count] [AGGREGATION aggregationType timeBucket] [WITHLABELS] FILTER filter1 [filter2 ...]
| 在目标 Pkey 中对指定时间段内,符合自定义过滤条件(filter)的 Datapoint 数据进行 Pkey 层级的聚合。
若您同时指定了 Pkey 和 Skey 层级的聚合,会优先对 Skey 层级进行聚合(使用方法与 EXTS.MRANGE 命令相同),再从 Pkey 层级对第一次聚合结果进行二次聚合。 |
注意事项
- 当前 ExTimeSeries 功能正处于灰度发布中,如需使用,请提交工单联系技术支持申请使用。
- 申请完成后,拥有 Administrator 角色的账号默认具备 ExTimeSeries 相关命令的所有权限。您也可以根据业务需要创建一个允许使用所有 ExTimeSeries 类命令的新角色(即该角色的 ACL 规则需设置为
+@exts
),创建角色后,您需要通过拥有该角色的账号登录 Redis 后即可使用 ExTimeSeries 相关命令。创建角色的具体操作步骤,请参见创建角色。 - 缓存数据库 Redis 版支持对 ExTimeSeries 数据类型进行大、热 Key 分析,能够帮助及时发现并分析数据库中的热 Key 和大 Key 详情,为您优化热 Key 和大 Key 提供数据参考。 具体操作步骤,请参见大 Key 分析和热 Key 分析。
- 成功申请使用 ExTimeSeries 功能后,实例将不再支持任何数据恢复功能,包括:
- 缓存数据库 Redis 版支持通过 EXTS.DEL 删除 ExTimeSeries 中指定 Pkey 的目标 Skey,包括该 Skey 中所有的 Datapoint 数据,当 Pkey 中不存在任何 Skey 时,该 Pkey 会被自动删除。
您也可以使用如下原生 Redis 命令实现删除 ExTimeSeries 的目的。
命令 | 语法 | 说明 |
---|
EXPIRE | EXPIRE Pkey seconds [NX | XX | GT | LT] | 设置 ExTimeSeries 的超时时间,超过该时间的 ExTimeSeries 会被自动删除。 |
UNLINK | UNLINK Pkey [Pkey ...] | 异步删除一个或多个 ExTimeSeries。当通过 UNLINK 命令删除 ExTimeSeries 时,这些 ExTimeSeries 会被标记为待删除状态,而真正的删除操作会放在后台线程中进行,不会阻塞 Redis 的当前进程。 |
DEL | DEL Pkey [Pkey ...] | 同步删除一个或多个 ExTimeSeries。当通过 DEL 命令删除 ExTimeSeries 时,删除操作会立即阻塞 Redis 当前线程,直到这些 ExTimeSeries 对应的内存空间被完全回收释放。如果待删除的 ExTimeSeries 数据量过大,可能会影响 Redis 整体性能。 |
EXTS.PCREATE
类别 | 说明 |
---|
命令语法 | EXTS.PCREATE Pkey |
时间复杂度 | O(1)。 |
命令描述 | 创建一个新 Pkey(ExTimeSeries 数据结构),若 Pkey 已存在则创建失败。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。 |
返回值 | |
示例 | 创建一个 Pkey 名称为 test_exts 的 ExTimeSeries。 EXTS.PCREATE test_exts
返回示例。 OK
|
EXTS.CREATE
类别 | 说明 |
---|
命令语法 | EXTS.CREATE Pkey Skey [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 label2 val2 ...] |
时间复杂度 | O(1)。 |
命令描述 | 在指定的 Pkey 中创建一个 Skey,若 Pkey 不存在则会自动创建一个新 Pkey,若 Skey 已经存在则创建失败。
您可以在创建时为 SKey 设置过期时间、是否开启压缩、标签等属性。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。RETENTION :Datapoint 数据的相对过期时间,单位:毫秒,取值不可超过 1 万亿毫秒。该参数不填表示不设置过期时间,即数据不会过期。说明 - 当 Skey 中所有 Datapoint 数据都过期后,该 Skey 会被自动删除。
- 当 Pkey 中不存在任何 Skey 时,该 Pkey 会被自动删除。
CHUNK_SIZE :存储 Datapoint 数据的单个 chunk 大小。默认值:256。
chunk 编码模式不同,CHUNK_SIZE 的含义不同。更多关于 CHUNK_SIZE 的说明,请参见数据结构说明-Chunk。ENCODING :设置是否为 Skey 开启压缩,该参数不填,表示默认开启压缩(即 COMPRESSED )。LABELS :Skey 的标签,支持同时设置多组标签,每组标签需同时设置对应的标签名和标签值,例如 LABELS stockid A issuer 1 。
|
返回值 | |
示例 | |
EXTS.ALTER
类别 | 说明 |
---|
命令语法 | EXTS.ALTER Pkey Skey [RETENTION time] |
时间复杂度 | O(1)。 |
命令描述 | 修改指定 Pkey 中目标 Skey 的属性,当前仅支持修改过期时间(即 RETENTION time )。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。RETENTION :Datapoint 数据的相对过期时间,单位:毫秒,取值不可超过 1 万亿毫秒。该参数不填表示不设置过期时间,即数据不会过期。说明 - 当 Skey 中所有 Datapoint 数据都过期后,该 Skey 会被自动删除。
- 当 Pkey 中不存在任何 Skey 时,该 Pkey 会被自动删除。
|
返回值 | |
示例 | 将 test_exts 中名为 volume 的 Skey 过期时间改为 15,000,000。 EXTS.ALTER test_exts volume RETENTION 15000000
返回示例。 OK
|
EXTS.ADD
类别 | 说明 |
---|
命令语法 | EXTS.ADD Pkey Skey timestamp value [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 ...] |
时间复杂度 | O(1)。 |
命令描述 | 为指定 Pkey 中的目标 Skey 插入一条 Datapoint 数据。若 Pkey 或 Skey 不存在则会自动创建,Skey 的过期时间、是否开启压缩、标签等属性仅在需要自动创建 Skey 的情况下生效。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。timestamp :待插入 Datapoint 的 Unix 时间戳,单位:毫秒,支持用 * 表示系统当前的时间戳。value :待插入 Datapoint 的数据值,数据类型为 Double。RETENTION :Datapoint 数据的相对过期时间,单位:毫秒,取值不可超过 1 万亿毫秒。该参数不填表示不设置过期时间,即数据不会过期。说明 - 当 Skey 中所有 Datapoint 数据都过期后,该 Skey 会被自动删除。
- 当 Pkey 中不存在任何 Skey 时,该 Pkey 会被自动删除。
CHUNK_SIZE :存储 Datapoint 数据的单个 chunk 大小。默认值:256。
chunk 编码模式不同,CHUNK_SIZE 的含义不同。更多关于 CHUNK_SIZE 的说明,请参见数据结构说明-Chunk。ENCODING :设置是否为 Skey 开启压缩,该参数不填,表示默认开启压缩(即 COMPRESSED )。LABELS :Skey 的标签,支持同时设置多组标签,每组标签需同时设置对应的标签名和标签值,例如 LABELS stockid A issuer 1 。
|
返回值 | |
示例 | 为已存在的 Pkey 名称为 test_exts 的 ExTimeSeries 创建一个名称为 issuer 的 Skey ,并为该 Skey 插入一条值为 66.0 ,时间戳为系统当前时间戳的 Datapoint 数据。创建 Skey 的同时为其设置相对过期时间为 10,000,000 毫秒,包含 stockid A 标签。 EXTS.ADD test_exts issuer * 66.0 RETENTION 10000000 LABELS stockid A
返回示例。 OK
|
EXTS.MODIFY
类别 | 说明 |
---|
命令语法 | EXTS.MODIFY Pkey Skey timestamp value [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 ...] |
时间复杂度 | O(1)。 |
命令描述 | 修改目标 Skey 中 指定时间点的 Datapoint 数据值。若 Pkey 或 Skey 不存在则会自动创建,Skey 的过期时间、是否开启压缩、标签等属性仅在需要自动创建 Skey 的情况下生效。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。timestamp :待更新 Datapoint 的 Unix 时间戳,单位:毫秒。value :待更新 Datapoint 的数据值,数据类型为 Double。RETENTION :Datapoint 数据的相对过期时间,单位:毫秒,取值不可超过 1 万亿毫秒。该参数不填表示不设置过期时间,即数据不会过期。说明 - 当 Skey 中所有 Datapoint 数据都过期后,该 Skey 会被自动删除。
- 当 Pkey 中不存在任何 Skey 时,该 Pkey 会被自动删除。
CHUNK_SIZE :存储 Datapoint 数据的单个 chunk 大小。默认值:256。
chunk 编码模式不同,CHUNK_SIZE 的含义不同。更多关于 CHUNK_SIZE 的说明,请参见数据结构说明-Chunk。ENCODING :设置是否为 Skey 开启压缩,该参数不填,表示默认开启压缩(即 COMPRESSED )。LABELS :Skey 的标签,支持同时设置多组标签,每组标签需同时设置对应的标签名和标签值,例如 LABELS stockid A issuer 1 。
|
返回值 | |
示例 | 将 test_exts 中 Skey closing_price 在指定时间点的 Datapoint 数据值改为 89.0。 EXTS.MODIFY test_exts closing_price 1744255211538 89.0
返回示例。 OK
|
EXTS.INCRBY
类别 | 说明 |
---|
命令语法 | EXTS.INCRBY Pkey Skey timestamp value [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 ...] |
时间复杂度 | O(1)。 |
命令描述 | 为指定 Pkey 中的目标 Skey 插入一条 Datapoint 数据,并将该命令中的 value 与目标 Skey 中时间最近的 Datapoint 所设 value 值相加实现递增。若您将命令中的 value 值指定为负数则实现递减。
若 Pkey 或 Skey 不存在则会自动创建,新建 Skey 中 Datapoint 的 value 初始值默认为 0。
Skey 的过期时间、是否开启压缩、标签等属性仅在需要自动创建 Skey 的情况下生效。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。timestamp :待更新 Datapoint 的 Unix 时间戳,单位:毫秒,支持用 * 表示系统当前的时间戳。value :待递增的值,数据类型为 Double。若您将 value 值指定为负数则实现递减。RETENTION :Datapoint 数据的相对过期时间,单位:毫秒,取值不可超过 1 万亿毫秒。该参数不填表示不设置过期时间,即数据不会过期。说明 - 当 Skey 中所有 Datapoint 数据都过期后,该 Skey 会被自动删除。
- 当 Pkey 中不存在任何 Skey 时,该 Pkey 会被自动删除。
CHUNK_SIZE :存储 Datapoint 数据的单个 chunk 大小。默认值:256。
chunk 编码模式不同,CHUNK_SIZE 的含义不同。更多关于 CHUNK_SIZE 的说明,请参见数据结构说明-Chunk。ENCODING :设置是否为 Skey 开启压缩,该参数不填,表示默认开启压缩(即 COMPRESSED )。LABELS :Skey 的标签,支持同时设置多组标签,每组标签需同时设置对应的标签名和标签值,例如 LABELS stockid A issuer 1 。
|
返回值 | |
示例 | 例如,Pkey test_exts 中 Skey closing_price 的最近一条 Datapoint 值为 8.0 ,您可以通过如下命令为该 Skey 的 value 实现递增。 EXTS.INCRBY test_exts closing_price * 3
返回示例。 OK
若此时执行 EXTS.GET test_exts closing_price 命令,将会返回如下结果。 1) (integer) 1744254273078
2) "11"
|
EXTS.INCRBY_TS
类别 | 说明 |
---|
命令语法 | EXTS.INCRBY_TS Pkey Skey timestamp value [RETENTION time] [CHUNK_SIZE size] [ENCODING <COMPRESSED|UNCOMPRESSED>] [LABELS label1 val1 ...] |
时间复杂度 | O(1)。 |
命令描述 | 将该命令中的 value 与目标 Skey 中指定时间点的 Datapoint 所设 value 值相加实现递增。若您将命令中的 value 值指定为负数则实现递减。
若 Pkey 或 Skey 不存在则会自动创建,新建 Skey 中 Datapoint 的 value 初始值默认为 0。
Skey 的过期时间、是否开启压缩、标签等属性仅在需要自动创建 Skey 的情况下生效。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。timestamp :待更新 Datapoint 的 Unix 时间戳,单位:毫秒。value :待递增的值,数据类型为 Double。若您将 value 值指定为负数则实现递减。RETENTION :Datapoint 数据的相对过期时间,单位:毫秒,取值不可超过 1 万亿毫秒。该参数不填表示不设置过期时间,即数据不会过期。说明 - 当 Skey 中所有 Datapoint 数据都过期后,该 Skey 会被自动删除。
- 当 Pkey 中不存在任何 Skey 时,该 Pkey 会被自动删除。
CHUNK_SIZE :存储 Datapoint 数据的单个 chunk 大小。默认值:256。
chunk 编码模式不同,CHUNK_SIZE 的含义不同。更多关于 CHUNK_SIZE 的说明,请参见数据结构说明-Chunk。ENCODING :设置是否为 Skey 开启压缩,该参数不填,表示默认开启压缩(即 COMPRESSED )。LABELS :Skey 的标签,支持同时设置多组标签,每组标签需同时设置对应的标签名和标签值,例如 LABELS stockid A issuer 1 。
|
返回值 | |
示例 | 例如,Pkey test_exts 中 Skey closing_price 在指定时间点的 Datapoint 值为 70.0,您可以通过如下命令为该 Skey 的 value 实现递减。 EXTS.INCRBY_TS test_exts closing_price 1744254890238 -30.0
返回示例。 OK
若此时执行 EXTS.GET test_exts closing_price 命令,将会返回如下结果。 1) (integer) 1744254890238
2) "40"
|
EXTS.MADD
类别 | 说明 |
---|
命令语法 | EXTS.MADD Pkey Skey timestamp value [Skey timestamp value ...] |
时间复杂度 | O(N),其中 N 为需要插入的 Datapoint 数量。 |
命令描述 | 为指定 Pkey 中的多个 Skey 分别插入一条 Datapoint 数据。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。timestamp :待插入 Datapoint 的 Unix 时间戳,单位:毫秒,支持用 * 表示系统当前的时间戳。value :待插入 Datapoint 的数据值,数据类型为 Double。
|
返回值 | |
示例 | 为 Pkey test_exts 中的 volume 和 closing_price Skey 分别插入一条 Datapoint 数据。 EXTS.MADD test_exts volume * 66.0 closing_price * 8.0
返回示例。 1) OK
2) OK
|
EXTS.MMODIFY
类别 | 说明 |
---|
命令语法 | EXTS.MMODIFY Pkey Skey timestamp value [Skey timestamp value ...] |
时间复杂度 | O(N),其中 N 为需要插入的 Datapoint 数量。 |
命令描述 | 批量修改多个 Skey 中在指定时间点的 Datapoint 数据值。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。timestamp :待更新 Datapoint 的 Unix 时间戳,单位:毫秒。value :待更新 Datapoint 的数据值,数据类型为 Double。
|
返回值 | |
示例 | 将 test_exts 中 closing_price 、volume 这两个 Skey 的 Datapoint 数据值分别改为 56.0 和 70.0。 EXTS.MMODIFY test_exts closing_price 1744255211538 56.0 volume 1744254890238 70.0
返回示例。 1) OK
2) OK
|
EXTS.MINCRBY
类别 | 说明 |
---|
命令语法 | EXTS.MINCRBY Pkey Skey timestamp value [Skey timestamp value ...] |
时间复杂度 | O(N),其中 N 为需要插入的 Datapoint 数量。 |
命令描述 | 为指定 Pkey 中的多个 Skey 分别插入一条 Datapoint 数据,并将该命令中的 value 与各个 Skey 中时间最近的 Datapoint 所设 value 值相加实现递增。若您将命令中的 value 值指定为负数则实现递减。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。timestamp :待更新 Datapoint 的 Unix 时间戳,单位:毫秒,支持用 * 表示系统当前的时间戳。value :待递增的值,数据类型为 Double。若您将 value 值指定为负数则实现递减。
|
返回值 | |
示例 | 命令示例。 EXTS.MINCRBY test_exts closing_price * -3.0 volume * 4.0
返回示例。 1) OK
2) OK
|
EXTS.MINCRBY_TS
类别 | 说明 |
---|
命令语法 | EXTS.MINCRBY_TS Pkey Skey timestamp value [Skey timestamp value ...] |
时间复杂度 | O(1)。 |
命令描述 | 批量修改多个目标 Skey 中 Datapoint 的 value。该命令中的 value 会与目标 Skey 中指定时间点的 Datapoint 所设 value 值相加实现递增。若您将命令中的 value 值指定为负数则实现递减。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。timestamp :待更新 Datapoint 的 Unix 时间戳,单位:毫秒。value :待递增的值,数据类型为 Double。若您将 value 值指定为负数则实现递减。
|
返回值 | |
示例 | 命令示例。 EXTS.MINCRBY_TS test_exts closing_price 1744257305364 -25.0 volume 1744254890238 62.0
返回示例。 1) OK
2) OK
|
EXTS.DEL
类别 | 说明 |
---|
命令语法 | EXTS.DEL Pkey Skey |
时间复杂度 | O(1)。 |
命令描述 | 删除指定 Pkey 中的目标 Skey,包括该 Skey 中所有的 Datapoint 数据。 说明 当 Pkey 中不存在任何 Skey 时,该 Pkey 会被自动删除。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。
|
返回值 | |
示例 | 命令示例。 EXTS.DEL test_exts closing_price
返回示例。 OK
|
EXTS.GET
类别 | 说明 |
---|
命令语法 | EXTS.GET Pkey Skey |
时间复杂度 | O(1)。 |
命令描述 | 查询指定 Pkey 的目标 Skey 中,时间最近的一条 Datapoint 数据。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。
|
返回值 | - 执行成功:返回对应的 Datapoint 数据。
- 其它情况返回相应的异常信息。
|
示例 | 命令示例。 EXTS.GET test_exts closing_price
返回示例。 1) (integer) 1744254402895
2) "8"
|
EXTS.INFO
类别 | 说明 |
---|
命令语法 | EXTS.INFO Pkey Skey |
时间复杂度 | O(1)。 |
命令描述 | 查询指定 Pkey 中目标 Skey 的属性信息,包括 Datapoint 数量、最近一条 Datapoint 的时间戳与 value、Skey 的标签等信息。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。
|
返回值 | - 执行成功:返回 Skey 的信息列表。
- 其它情况返回相应的异常信息。
|
示例 | 命令示例。 EXTS.INFO test_exts closing_price
返回示例。 1) totalDataPoints
2) (integer) 4
3) maxDataPoints
4) (integer) 0
5) maxDataPointsPerChunk
6) (integer) 256
7) dataPointsExpireTime
8) (integer) 0
9) lastTimestamp
10) (integer) 1744254402895
11) chunkCount
12) (integer) 1
13) lastValue
14) (integer) 8
15) labels
16) 1) 1) "stockid"
2) "A"
2) 1) "issuer"
2) "1"
说明 返回结果的参数说明如下: totalDataPoints :当前 Skey 中已存储的 Datapoint 数量。maxDataPoints :当前 Skey 可存储的 Datapoint 数量上限,默认为 0,表示没有数量上限。maxDataPointsPerChunk :创建 Skey 时所设置的 chunk 大小(即 CHUNK_SIZE )。dataPointsExpireTime :当前 Skey 的相对过期时间(即 RETENTION ),单位:毫秒,0 表示不会过期。lastTimestamp :最近一条 Datapoint 的 Unix 时间戳,单位:毫秒。chunkCount :当前 Skey 中的 chunk 数量。lastValue :最近一条 Datapoint 的 value。labels :当前 Skey 所设置的标签组(包括标签名和标签值)信息。
|
EXTS.QUERYINDEX
类别 | 说明 |
---|
命令语法 | EXTS.QUERYINDEX Pkey filter1 [filter2 ...] |
时间复杂度 | O(N),其中 N 为符合过滤条件的最大集合数。 |
命令描述 | 从指定 Pkey 中查询出符合自定义过滤条件(filter)的 Skey。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。filter :过滤条件。缓存数据库 Redis 版支持在自定义过滤条件(filter)中使用多种命令及命令组合,但需至少包含 EQ 、CONTAINS 、LIST_MATCH 逻辑中的任意 1 种。更多关于 filter 的详情,请参见条件查询语法。
|
返回值 | - 执行成功将返回符合过滤条件的 Skey。
- 其它情况返回相应的异常信息。
|
示例 | - 命令示例一
从 Pkey test_exts 中筛选出 stockid 标签为 A 或 B ,且 issuer 标签不为 1 的所有 Skey。EXTS.QUERYINDEX test_exts stockid=(A,B) issuer!=1
返回示例。1) "closing_price"
2) "volume2"
- 命令示例二
从 Pkey test_exts 中筛选出所有包含 stockid 标签的 Skey。EXTS.QUERYINDEX test_exts stockid!=
返回示例。1) "closing_price"
2) "closing_price2"
3) "volume1"
4) "volume2"
5) "isser"
|
EXTS.RANGE
类别 | 说明 |
---|
命令语法 | EXTS.RANGE Pkey Skey fromTimestamp toTimestamp [COUNT count] [AGGREGATION aggregationType timeBucket] |
时间复杂度 | O(N),其中 N 为目标 Datapoint 的数据块个数。 |
命令描述 | 在目标 Skey 中查询指定时间段内(即包含指定时间点)的 Datapoint 数据。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。Skey :Skey 名称。fromTimestamp :查询的开始时间,格式为 Unix 时间戳,单位:毫秒。toTimestamp :查询的结束时间,格式为 Unix 时间戳,单位:毫秒。允许用 * 表示系统当前的时间戳,若该值等于 fromTimestamp ,表示查询仅包含该时间点的 Datapoint 数据。COUNT :指定允许返回的 Datapoint 条数上限,取值不可超过 10 万。若该参数不填,表示最多允许返回 10 万条 Datapoint 数据。AGGREGATION :设置 Skey 的聚合查询条件,包括:
aggregationType :聚合类型,例如按最大值(MAX )、最小值(MIN )、平均值(AVG )等进行聚合。timeBucket :采样间隔,单位:毫秒,采样间隔最小为 1,000 毫秒。
缓存数据库 Redis 版会将采样间隔内的数据按照指定类型进行聚合并返回结果,返回的时间点为采样间隔的开始时间。例如,AGGREGATION MAX 3000 表示会返回每 3,000 毫秒内的最大值。关于聚合查询语法的更多详情,请参见聚合查询语法。
|
返回值 | - 执行成功:返回符合查询条件的 Datapoint 数据,若命令中指定了聚合查询条件,则返回聚合后的结果。
- 其它情况返回相应的异常信息。
|
示例 | 从 Pkey test_exts 的 Skey closing_price 中查询出指定时间段内每 3,000 毫秒的最大值,且最多允许返回 2 条数据。 EXTS.RANGE test_exts closing_price 1743566159000 * COUNT 2 AGGREGATION MAX 3000
返回示例。 1) 1) 1) (integer) 1744255152000
2) "73"
2) 1) (integer) 1744255167000
2) "76"
2) (integer) 1
说明 返回结果中的最后一行信息可用于判断是否已展示了符合条件的全部 Datapoint 数据。其中: 0 :表示已全部展示。1 :表示还有符合条件的 Datapoint 数据未展示。此时,如果您需要获取更多符合查询条件的 Datapoint 数据,您可以将已返回结果中最后一个 Datapoint 的时间戳作为下一次查询的开始时间继续遍历查询,帮助您实现分批聚合。
|
EXTS.MRANGE
类别 | 说明 |
---|
命令语法 | EXTS.MRANGE Pkey fromTimestamp toTimestamp [COUNT count] [AGGREGATION aggregationType timeBucket] [WITHLABELS] FILTER filter1 [filter2 ...] |
时间复杂度 | O(N),其中 N 为目标 Datapoint 的数据块个数。 |
命令描述 | 在目标 Pkey 中查询指定时间段内(即包含指定时间点),符合符合自定义过滤条件(filter)的 Skey 信息详情,包括 Skey 名称、包含的标签、 Datapoint 数据。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。fromTimestamp :查询的开始时间,格式为 Unix 时间戳,单位:毫秒。toTimestamp :查询的结束时间,格式为 Unix 时间戳,单位:毫秒。允许用 * 表示系统当前的时间戳,若该值等于 fromTimestamp ,表示查询仅包含该时间点的 Datapoint 数据。COUNT :指定允许返回的 Datapoint 条数上限,取值不可超过 10 万。若该参数不填,表示最多允许返回 10 万条 Datapoint 数据。AGGREGATION :设置 Skey 的聚合查询条件,包括:
aggregationType :聚合类型,例如按最大值(MAX )、最小值(MIN )、平均值(AVG )等进行聚合。timeBucket :采样间隔,单位:毫秒,采样间隔最小为 1,000 毫秒。
缓存数据库 Redis 版会将采样间隔内的数据按照指定类型进行聚合并返回结果,返回的时间点为采样间隔的开始时间。例如,AGGREGATION MAX 3000 表示会返回每 3,000 毫秒内的最大值。关于聚合查询语法的更多详情,请参见聚合查询语法。
WITHLABELS :设置返回结果中是否包含标签信息。若该参数不填,表示默认不显示标签信息。Filter :过滤条件。缓存数据库 Redis 版支持在自定义过滤条件(filter)中使用多种命令及命令组合,但需至少包含 EQ 、CONTAINS 、LIST_MATCH 逻辑中的任意 1 种。更多关于 filter 的详情,请参见条件查询语法。
|
返回值 | - 执行成功:返回符合查询条件的 Skey 信息列表。
- 其它情况返回相应的异常信息。
|
示例 | - 命令示例一
从 Pkey test_exts 查询出指定时间段内每 3,000 毫秒的总和,且包含标签 stockid 为 B 的 Skey 信息列表,且每个 Skey 最多允许返回 2 条 Datapoint 数据。EXTS.MRANGE test_exts 1743566159000 * COUNT 2 AGGREGATION SUM 3000 FILTER stockid=B
返回示例。1) 1) "closing_price"
2) (empty array)
3) 1) 1) (integer) 1744254909000
2) "107"
4) (integer) 0
2) 1) "closing_price2"
2) (empty array)
3) 1) 1) (integer) 1744255152000
2) "73"
2) 1) (integer) 1744255167000
2) "76"
4) (integer) 1
3) 1) "volume"
2) (empty array)
3) 1) 1) (integer) 1744254906000
2) "107"
4) (integer) 0
- 命令示例二
从 Pkey test_exts 查询出指定时间段内每 5,000 毫秒的 value 数量,需要包含标签 stockid 为 B 但 issuer 不为 1 的 Skey 信息列表,且需要在返回结果中展示标签信息。EXTS.MRANGE test_exts 1743566159000 * AGGREGATION COUNT 5000 WITHLABELS FILTER stockid=B issuer!=1
返回示例。1) 1) "volume"
2) 1) 1) "stockid"
2) "B"
2) 1) "issuer"
2) "2"
3) 1) 1) (integer) 1744254900000
2) "1"
4) (integer) 0
说明 返回结果中每个 Skey 列表的最后一行信息可用于判断是否已展示了符合条件的全部 Datapoint 数据。其中: 0 :表示已全部展示。1 :表示还有符合条件的 Datapoint 数据未展示。
关于该字段的更多详情,可参考 EXTS.RANG 中的返回结果说明。
|
EXTS.PRANGE
类别 | 说明 |
---|
命令语法 | EXTS.PRANGE Pkey fromTimestamp toTimestamp pkeyAggregationType pkeyTimeBucket [COUNT count] [AGGREGATION aggregationType timeBucket] [WITHLABELS] FILTER filter1 [filter2 ...] |
时间复杂度 | O(N),其中 N 为目标 Datapoint 的数据块个数。 |
命令描述 | 在目标 Pkey 中对指定时间段内,符合自定义过滤条件(filter)的 Datapoint 数据进行 Pkey 层级的聚合。
若您同时指定了 Pkey 和 Skey 层级的聚合,会优先对 Skey 层级进行聚合(使用方法与 EXTS.MRANGE 命令相同),再从 Pkey 层级对第一次聚合结果进行二次聚合。 |
选项 | Pkey :Pkey 名称,用于指定作为命令调用对象的 ExTimeSeries。pkeyAggregationType :Pkey 的聚合类型。关于聚合查询语法的更多详情,请参见聚合查询语法。pkeyTimeBucket :Pkey 的采样间隔,单位:毫秒,采样间隔最小为 1,000 毫秒。fromTimestamp :查询的开始时间,格式为 Unix 时间戳,单位:毫秒。toTimestamp :查询的结束时间,格式为 Unix 时间戳,单位:毫秒。允许用 * 表示系统当前的时间戳,若该值等于 fromTimestamp ,表示查询仅包含该时间点的 Datapoint 数据。COUNT :指定允许返回的 Datapoint 条数上限,取值不可超过 10 万。若该参数不填,表示最多允许返回 10 万条 Datapoint 数据。AGGREGATION :设置 Skey 的聚合查询条件,包括:
aggregationType :聚合类型,例如按最大值(MAX )、最小值(MIN )、平均值(AVG )等进行聚合。timeBucket :采样间隔,单位:毫秒,采样间隔最小为 1,000 毫秒。
缓存数据库 Redis 版会将采样间隔内的数据按照指定类型进行聚合并返回结果,返回的时间点为采样间隔的开始时间。例如,AGGREGATION MAX 3000 表示会返回每 3,000 毫秒内的最大值。关于聚合查询语法的更多详情,请参见聚合查询语法。
WITHLABELS :设置返回结果中是否包含标签信息。若该参数不填,表示默认不显示标签信息。Filter :过滤条件。缓存数据库 Redis 版支持在自定义过滤条件(filter)中使用多种命令及命令组合,但需至少包含 EQ 、CONTAINS 、LIST_MATCH 逻辑中的任意 1 种。更多关于 filter 的详情,请参见条件查询语法。
|
返回值 | - 执行成功:返回符合查询条件聚合结果。
- 其它情况返回相应的异常信息。
|
示例 | 在 Pkey test_exts 中,对指定时间段内的 Datapoint 数据进行如下聚合操作: - Datapoint 数据需来自于包含了标签
stockid 为 B 的 Skey,且每个 Skey 最多允许返回 2 条 Datapoint 数据。 - 先将筛选出的 Datapoint 数据在 Skey 层级进行每 3,000 毫秒的求和。
- 再将上述聚合过的数据在 Pkey 层级进行每 5,000 毫秒的求和。
EXTS.PRANGE test_exts 1743566159000 * SUM 5000 COUNT 2 AGGREGATION SUM 3000 FILTER stockid=B
返回示例。 1) 1) 1) (integer) 1744254905000
2) "214"
2) 1) (integer) 1744255150000
2) "73"
2) (integer) 1
|
查询语法
条件查询语法
缓存数据库 Redis 版的 ExTimeSeries 支持将 Skey 的标签(Label)作为过滤条件(filter)快速查询出目标 Skey。ExTimeSeries 支持的过滤条件(filter)语法如下表所示。
说明
- 缓存数据库 Redis 版支持在自定义过滤条件(filter)中使用下表中所有的命令及命令组合,但需至少包含
EQ
、CONTAINS
、LIST_MATCH
逻辑中的任意 1 种。 - 针对下表中的命令语法,定义如下:
条件逻辑 | filter 命令语法 | 语法说明 |
---|
EQ(equals) | L=V | 从标签 L 中筛选出标签值为 V 的 Skey。 |
CONTAINS | L!= | 从标签 L 中筛选出标签值不为 NULL 的 Skey,即所有包含标签 L 的 Skey。 |
LIST_TMATCH | L=(V1,V2,...) | 从标签 L 中筛选出标签值为 V1、V2 等的Skey。 |
NOEQ(equals) | L!=V | 从标签 L 中筛选出标签值不为 V 的 Skey。 |
NOCONTAINS | L= | 从标签 L 中筛选出标签值为 NULL 的 Skey,即所有不包含标签 L 的 Skey。 |
LIST_NOTMATCH | L!=(V1,V2,...) | 从标签 L 中筛选出标签值不为 V1、V2 等的 Skey。 |
聚合查询语法
缓存数据库 Redis 版的 ExTimeSeries 支持针对采样间隔(timeBucket)的聚合查询操作。ExTimeSeries 支持的聚合类型如下表所示。
聚合语法 | 语法说明 |
---|
MAX | 最大值。 |
MIN | 最小值。 |
AVG | 平均值。 |
SUM | 求和。 |
FIRST | 第一个值。 |
LAST | 最后一个值。 |
RANGE | 范围(最大值 ~ 最小值)。 |
COUNT | value 数量。 |
STD.P | 总体方差。 |
STD.S | 样本方差。 |
VAR.P | 总体标准差。 |
VAR.S | 样本标准差。 |