摘要
TimeSeries 简介
一个 Redis 时间序列(Time Series) 是有序的一系列采样数据点:
| 组成部分 |
说明 |
| 时间戳(timestamp) |
毫秒级时间标签,可客户端指定或由服务器填充 |
| 值(value) |
64 位浮点数 |
| 元数据(labels) |
一组键值对,可用于过滤与聚合查询 |
| 保留策略(retention) |
数据生命周期控制,过期自动丢弃 |
| 特性 |
说明 |
| 高吞吐写入 |
支持每秒接收大量数据点,延迟极低 |
| 区间查询 |
可按时间范围检索数据,如 TS.RANGE / TS.MRANGE |
| 聚合查询 |
内建 min、max、avg、sum、count、first、last 等聚合功能 |
| 自动下采样 & 累积规则 |
通过 aggregation rules 自动生成更粗粒度指标 |
| 保留策略(Retention) |
设置最大保存时间或样本数量 |
| 标签索引(Labels) |
支持基于标签的跨序列查询 |
| 高效存储 |
使用压缩与内存结构优化空间成本 |
| 工具整合 |
支持 Grafana、Prometheus、Telegraf 等生态集成 |
| 场景 |
描述 |
| 物联网(IoT)监控 |
温度、湿度、设备状态等 |
| 系统监控与指标收集 |
CPU、内存、网络指标的实时存储与分析 |
| 业务指标分析 |
每日/每小时活跃用户数量、请求延迟等 |
| 金融时间序列 |
股票价格、交易量的快速写入和分析 |
| 实时告警 |
数据越界时触发告警逻辑 |
TimeSeries 命令说明
| 阶段 |
对应命令 |
| 创建 |
TS.CREATE |
| 修改结构 |
TS.ALTER |
| 建立聚合 |
TS.CREATERULE / TS.DELETERULE |
| 写入 |
TS.ADD / TS.MADD / TS.INCRBY / TS.DECRBY |
| 查询单序列 |
TS.GET / TS.RANGE / TS.REVRANGE |
| 查询多序列 |
TS.MGET / TS.MRANGE / TS.MREVRANGE / TS.QUERYINDEX |
| 清理数据 |
TS.DEL |
| 查看状态 |
TS.INFO |
一、时间序列创建与结构管理类
| 命令 |
功能说明 |
典型使用场景 |
| TS.CREATE |
创建一个新的时间序列(可指定保留策略、标签、chunk 大小等) |
初始化指标,如创建 CPU、QPS、延迟等指标序列 |
| TS.ALTER |
修改已有时间序列的配置(retention、chunk size、duplicate policy、labels) |
动态调整数据保留周期、标签信息 |
| TS.CREATERULE |
创建压缩 / 聚合规则(从 source series 自动聚合到 dest series) |
原始数据 → 按分钟 / 小时聚合 |
| TS.DELETERULE |
删除已有的压缩 / 聚合规则 |
停止某条自动聚合规则 |
1️⃣ TS.CREATE : 创建时间序列
TS.CREATE key
[RETENTION retentionPeriod]
[ENCODING <COMPRESSED|UNCOMPRESSED>]
[CHUNK_SIZE size]
[DUPLICATE_POLICY policy]
[IGNORE ignoreMaxTimediff ignoreMaxValDiff]
[LABELS [label value ...]]
| 参数 |
作用 |
可选值 / 约束 |
默认值 |
典型使用建议 |
| key |
时间序列的 Redis Key |
任意合法 Redis key |
无 |
建议包含业务语义,如 ts:cpu:node1 |
| RETENTION |
数据保留时长(毫秒),超过自动删除 |
≥ 0,0 表示永久保留 |
0 |
高频指标必须设置,避免内存无限增长 |
| ENCODING |
数据存储编码方式 |
COMPRESSED: 内存占用低,CPU 有轻微开销
UNCOMPRESSED:查询快,占用内存高 |
COMPRESSED |
绝大多数场景保持默认 |
| CHUNK_SIZE |
每个数据块的大小(字节),影响内存碎片与压缩效率 |
≥ 128 bytes(通常 1KB–64KB) |
4096 |
写入频繁时适当调大 |
| DUPLICATE_POLICY |
同一 timestamp 重复写入时的处理策略 |
见下表 |
全局配置 |
明确指定,避免默认行为变化 |
| IGNORE |
忽略与上一点差异过小的数据 |
ignoreMaxTimediff: 最大允许时间差(毫秒)
ignoreMaxValDiff: 最大允许的数值差 |
关闭 |
用于降噪和降采样
示例:IGNORE 1000 0.01: 1 秒内,变化小于 0.01 的数据将被忽略 |
| LABELS |
标签键值对,用于索引和过滤 |
任意字符串对
LABELS key1 value1 key2 value2 ... |
无 |
强烈建议用于查询 |
- DUPLICATE_POLICY(重复时间戳策略)
当同一个 timestamp 被多次写入时生效
| 策略 |
处理逻辑 |
| BLOCK |
默认,重复时间戳直接失败 |
| FIRST |
保留已有值,忽略新值 |
| LAST |
覆盖已有值,用新值替代 |
| MIN |
仅当新值更小才覆盖 |
| MAX |
仅当新值更大才覆盖 |
| SUM |
累加值(已有值 + 新值) |
- 示例: 创建一个 CPU 指标时间序列,自动过期 1 小时之前的数据
TS.CREATE ts:cpu:server1
RETENTION 3600000
ENCODING COMPRESSED
CHUNK_SIZE 8192
DUPLICATE_POLICY LAST
IGNORE 1000 0.1
LABELS host server1 metric cpu
127.0.0.1:6379> type ts:cpu:server1
TSDB-TYPE
2️⃣ TS.ALTER : 修改时间序列配置
TS.ALTER key
[RETENTION retentionPeriod]
[CHUNK_SIZE size]
[DUPLICATE_POLICY policy]
[LABELS [label value ...]]
TS.ALTER ts:cpu:server1
RETENTION 7200000
LABELS host server1 metric cpu env prod
3️⃣ TS.CREATERULE : 创建自动聚合规则
- 场景说明
- 原始序列:ts:cpu:server1(秒级数据)
- 聚合目标:ts:cpu:server1:avg1m(按 1 分钟平均值聚合)
- 语法:
TS.CREATERULE sourceKey destKey
AGGREGATION aggregator bucketDuration
[alignTimestamp]
| 参数 |
作用 |
可选值 / 约束 |
是否必填 |
行为说明 |
使用注意事项 |
| sourceKey |
源时间序列 Key |
必须是已存在的 TS key |
是 |
新写入数据从该序列触发聚合 |
必须先创建 |
| destKey |
目标聚合时间序列 Key |
必须是已存在的 TS key |
是 |
聚合结果写入该序列 |
通常 retention 更长 |
| aggregator |
聚合函数 |
见下表 |
是 |
定义每个 bucket 内如何计算 |
不同函数计算成本不同 |
| bucketDuration |
聚合时间桶宽度(毫秒) |
> 0 |
是 |
控制聚合粒度 |
决定数据降采样程度 |
| alignTimestamp |
对齐时间戳基准 |
毫秒时间戳 |
否 |
控制 bucket 起始对齐方式 |
跨系统对齐时非常重要 |
| 聚合器 |
说明 |
| AVG |
平均值 |
| SUM |
求和 |
| MIN |
最小值 |
| MAX |
最大值 |
| COUNT |
样本数量 |
| FIRST |
第一个样本 |
| LAST |
最后一个样本 |
| RANGE |
MAX - MIN |
| STD.P |
总体标准差 |
| STD.S |
样本标准差 |
| VAR.P |
总体方差 |
| VAR.S |
样本方差 |
| 类型 |
示例值 |
含义 |
| 0(Unix Epoch)(推荐做法) |
0 |
从 1970-01-01 00:00:00 UTC 对齐 |
| 任意固定时间戳 |
1700000000000 |
从指定时间点对齐 |
| 当前时间戳 |
$(date +%s%3N) |
从创建规则时刻对齐 |
| 业务时间边界 |
某天 00:00 的毫秒值 |
对齐到业务周期 |
| 不指定 |
(参数省略) |
自动使用首条写入时间 |
- 示例: 每 60,000ms(1分钟)做一次平均聚合
TS.CREATE ts:cpu:server1:avg1m
RETENTION 86400000
LABELS host server1 metric cpu_1m
TS.CREATERULE ts:cpu:server1 ts:cpu:server1:avg1m
AGGREGATION AVG 60000
TS.CREATERULE ts:cpu:server1 ts:cpu:server1:avg1m
AGGREGATION AVG 60000 0
4️⃣ TS.DELETERULE : 删除自动聚合规则
TS.DELETERULE sourceKey destKey
TS.DELETERULE ts:cpu:server1 ts:cpu:server1:avg1m
二、数据写入与更新类
| 命令 |
功能说明 |
典型使用场景 |
| TS.ADD |
向时间序列追加一个样本点(timestamp, value) |
实时写入监控数据 |
| TS.MADD |
批量向多个时间序列追加样本 |
高吞吐场景,减少网络 RTT |
| TS.INCRBY |
对最新时间戳的值做自增(不存在则创建新样本) |
计数器、累计指标 |
| TS.DECRBY |
对最新时间戳的值做自减(不存在则创建新样本) |
库存、余额类递减指标 |
1️⃣ TS.ADD : 向时间序列追加一个样本点
TS.ADD key timestamp value
[RETENTION retentionPeriod]
[ENCODING <COMPRESSED|UNCOMPRESSED>]
[CHUNK_SIZE size]
[DUPLICATE_POLICY policy]
[ON_DUPLICATE policy_ovr]
[IGNORE ignoreMaxTimediff ignoreMaxValDiff]
[LABELS [label value ...]]
- 如果 key 不存在,TS.ADD 会 隐式创建时间序列(类似 TS.CREATE)。
- 参数说明
| 参数 |
作用 |
可选值 / 约束 |
是否覆盖已有配置 |
生效范围 |
使用注意事项 |
| key |
时间序列 Key |
合法 Redis key |
— |
— |
不存在时自动创建 |
| timestamp |
样本时间戳 |
毫秒整数 / * |
— |
当前写入 |
* 表示服务器当前时间 |
| value |
样本值 |
浮点数 |
— |
当前写入 |
NaN / Inf 不允许 |
| RETENTION |
设置保留周期 |
≥ 0(毫秒) |
仅首次创建生效 |
序列级 |
已存在 key 不会被修改 |
| ENCODING |
存储编码 |
COMPRESSED / UNCOMPRESSED |
仅首次创建生效 |
序列级 |
生产推荐 COMPRESSED |
| CHUNK_SIZE |
数据块大小 |
≥ 128 bytes |
仅首次创建生效 |
序列级 |
不影响已有 chunk |
| DUPLICATE_POLICY |
设置默认重复策略 |
BLOCK / FIRST / LAST / MIN / MAX / SUM |
仅首次创建生效 |
序列级 |
与 ON_DUPLICATE 有优先级关系 |
| ON_DUPLICATE |
本次写入的重复策略 |
同上 |
覆盖序列级策略 |
当前写入 |
推荐用于临时覆盖 |
| IGNORE |
忽略微小变化写入 |
两个阈值 |
仅首次创建生效 |
序列级 |
用于降噪 |
| LABELS |
设置标签 |
键值对 |
仅首次创建生效 |
序列级 |
已存在 key 不会修改 |
TS.ADD ts:cpu:server1 * 80.5
(integer) 1767777655255
2️⃣ TS.MADD : 批量向多个时间序列追加样本
TS.MADD key timestamp value [key timestamp value ...]
TS.MADD ts:cpu:server1 * 80.5 ts:cpu:server2 * 90.5 ts:cpu:server3 * 70.5
1) (integer) 1767777807933
2) (integer) 1767777807933
3) (integer) 1767777807933
3️⃣ TS.INCRBY : 对最新时间戳的值做自增(不存在则创建新样本)
TS.INCRBY key addend
[TIMESTAMP timestamp]
[RETENTION retentionPeriod]
[ENCODING <COMPRESSED|UNCOMPRESSED>]
[CHUNK_SIZE size]
[DUPLICATE_POLICY policy]
[IGNORE ignoreMaxTimediff ignoreMaxValDiff]
[LABELS [label value ...]]
| 参数 |
作用 |
可选值 / 约束 |
是否覆盖已有配置 |
生效范围 |
使用注意事项 |
| key |
时间序列 Key |
合法 Redis key |
— |
— |
不存在会自动创建 |
| addend |
增量值 |
浮点数 |
— |
当前写入 |
支持负数(等价 DECR) |
| TIMESTAMP |
指定写入时间戳 |
毫秒整数 |
— |
当前写入 |
默认使用服务器时间 |
| RETENTION |
设置保留周期 |
≥ 0(毫秒) |
仅首次创建生效 |
序列级 |
已存在 key 不生效 |
| ENCODING |
存储编码 |
COMPRESSED / UNCOMPRESSED |
仅首次创建生效 |
序列级 |
推荐 COMPRESSED |
| CHUNK_SIZE |
数据块大小 |
≥ 128 bytes |
仅首次创建生效 |
序列级 |
高频写入可调大 |
| DUPLICATE_POLICY |
默认重复时间戳策略 |
BLOCK / FIRST / LAST / MIN / MAX / SUM |
仅首次创建生效 |
序列级 |
对计数器通常设 SUM |
| IGNORE |
忽略微小变化 |
两个阈值 |
仅首次创建生效 |
序列级 |
计数器一般不使用 |
| LABELS |
标签 |
键值对 |
仅首次创建生效 |
序列级 |
用于 MGET / MRANGE |
-
如果 key 不存在,TS.INCRBY 会 隐式创建时间序列。
-
如果没有指定 TIMESTAMP,则自动使用服务器当前时间。
-
写入逻辑等价于:读取最新值 + addend → 写回一个新样本。
-
示例
TS.INCRBY ts:cpu:server1 10
(integer) 1767778308125
TS.INCRBY ts:cpu:server1 5 TIMESTAMP 1767778308126
4️⃣ TS.DECRBY : 对最新时间戳的值做自减(不存在则创建新样本)
- 与
TS.INCRBY 相似,不再赘述。
- 实际上
TS.INCRBY 中设置 addend 为负数 就是 TS.DECR
三、数据查询(单序列)类
| 命令 |
功能说明 |
典型使用场景 |
| TS.GET |
获取某个时间序列最新(最大 timestamp)的样本 |
获取当前最新指标值 |
| TS.RANGE |
按时间正序查询一个时间序列的区间数据 |
绘图、趋势分析 |
| TS.REVRANGE |
按时间逆序查询一个时间序列的区间数据 |
获取最近 N 条数据 |
1️⃣ TS.GET : 获取某个时间序列最新(最大 timestamp)的样本
TS.GET key [LATEST]
| 参数 |
作用 |
| key |
时间序列 Key |
| LATEST |
获取最新样本 |
-
LATEST 说明
- 当一个时间序列是经过聚合(compaction)处理的时,LATEST 参数会生效。使用 LATEST 时,TS.GET 会返回最新(可能是部分的)桶的聚合值。不使用 LATEST 时,TS.GET 不会返回最新(可能是部分的)桶的值。当时间序列不是聚合的时,LATEST 会被忽略。
- 最新桶中的数据可能是不完整的。只有当有新的样本到来并开启一个新的最新桶时,原桶才会被关闭并进行聚合。然而,在某些情况下,也需要获取最新(可能是部分的)桶的聚合值,此时就可以使用 LATEST。
-
示例:
TS.GET ts:cpu:server1 LATEST
1) (integer) 1767778308126
2) 115.5
2️⃣ TS.RANGE : 按时间正序查询一个时间序列的区间数据
TS.RANGE key fromTimestamp toTimestamp
[LATEST]
[FILTER_BY_TS ts...]
[FILTER_BY_VALUE min max]
[COUNT count]
[[ALIGN align] AGGREGATION aggregator bucketDuration [BUCKETTIMESTAMP bt] [EMPTY]]
| 参数 |
类型 |
说明 |
可选值 / 说明 |
key |
string |
时间序列的键名 |
必选 |
fromTimestamp |
integer |
查询起始时间戳,-: 最小值 |
必选 |
toTimestamp |
integer |
查询结束时间戳 ,+: 最大值 |
必选 |
LATEST |
flag |
当时间序列是 compaction 时,返回最新(可能部分)的桶的聚合值 |
可选 |
FILTER_BY_TS ts... |
list of integers |
只返回指定时间戳的样本 |
可选 |
FILTER_BY_VALUE min max |
range |
只返回值在 [min, max] 区间的样本 |
可选 |
COUNT count |
integer |
限制返回的样本数量(最多 count 个) |
可选 |
ALIGN align |
string |
对齐聚合桶的时间戳(如 start、end、自定义时间戳) |
可选,需与 AGGREGATION 一起使用 |
AGGREGATION aggregator bucketDuration |
aggregation |
对数据进行聚合计算,aggregator 为聚合函数(如 avg, sum, min, max 等),bucketDuration 为桶的时长 |
可选 |
BUCKETTIMESTAMP bt |
string |
聚合桶时间戳选择,bt 可为 start 或 end |
可选 |
EMPTY |
flag |
即使桶为空也返回结果 |
可选 |
TS.RANGE ts:cpu:server1 0 1767778308126
1) 1) (integer) 1767777655255
2) 80.5
2) 1) (integer) 1767777807933
2) 70.5
3) 1) (integer) 1767777873866
2) 80.5
4) 1) (integer) 1767777965870
2) 80.5
5) 1) (integer) 1767778300909
2) 90.5
6) 1) (integer) 1767778308125
2) 105.5
7) 1) (integer) 1767778308126
2) 115.5
TS.RANGE ts:cpu:server1 - + AGGREGATION avg 1000
1) 1) (integer) 1767777655000
2) 80.5
2) 1) (integer) 1767777807000
2) 70.5
3) 1) (integer) 1767777873000
2) 80.5
4) 1) (integer) 1767777965000
2) 80.5
5) 1) (integer) 1767778300000
2) 90.5
6) 1) (integer) 1767778308000
2) 110.5
3️⃣ TS.REVRANGE : 按时间逆序查询一个时间序列的区间数据
- 与 TS.RANGE 类似,只是返回结果是倒序的
- 示例
TS.REVRANGE ts:cpu:server1 0 1767778308126
1) 1) (integer) 1767778308126
2) 115.5
2) 1) (integer) 1767778308125
2) 105.5
3) 1) (integer) 1767778300909
2) 90.5
4) 1) (integer) 1767777965870
2) 80.5
5) 1) (integer) 1767777873866
2) 80.5
6) 1) (integer) 1767777807933
2) 70.5
7) 1) (integer) 1767777655255
2) 80.5
四、数据查询(多序列 / 聚合)类
| 命令 |
功能说明 |
典型使用场景 |
| TS.MGET |
根据标签过滤,获取多个时间序列的最新值 |
批量获取多个实例的当前指标 |
| TS.MRANGE |
按标签过滤,正序查询多个时间序列的区间数据 |
多维指标分析、聚合 |
| TS.MREVRANGE |
按标签过滤,逆序查询多个时间序列的区间数据 |
最近数据聚合分析 |
| TS.QUERYINDEX |
根据标签过滤,返回匹配的时间序列 key 列表 |
发现有哪些指标符合条件 |
1️⃣ TS.MGET : 根据标签过滤,获取多个时间序列的最新值
TS.MGET [LATEST] [WITHLABELS | <SELECTED_LABELS label...>] FILTER filterExpr...
| 参数 |
类型 |
说明 |
可选值 / 说明 |
LATEST |
flag |
对 compaction 类型的时间序列,返回最新(可能部分)的样本值 |
可选 |
WITHLABELS |
flag |
返回样本的同时附带时间序列的所有标签 |
可选 |
<SELECTED_LABELS label...> |
list |
返回样本时只附带指定标签 |
可选,不能与 WITHLABELS 一起使用 |
FILTER filterExpr... |
list of expressions |
过滤时间序列,根据标签匹配规则筛选出符合条件的序列 |
必选,支持标签匹配表达式,如 sensor=temperature 或 region=* |
TS.MGET WITHLABELS FILTER metric=cpu
1) 1) "ts:cpu:server1"
2) 1) 1) "host"
2) "server1"
2) 1) "metric"
2) "cpu"
3) 1) "env"
2) "prod"
3) 1) (integer) 1767778308126
2) 115.5
2) 1) "ts:cpu:server2"
2) 1) 1) "host"
2) "server1"
2) 1) "metric"
2) "cpu"
3) 1) (integer) 1767777965870
2) 90.5
3) 1) "ts:cpu:server3"
2) 1) 1) "host"
2) "server1"
2) 1) "metric"
2) "cpu"
3) 1) (integer) 1767777965870
2) 70.5
2️⃣ TS.MRANGE : 按标签过滤,正序查询多个时间序列的区间数据
TS.MRANGE fromTimestamp toTimestamp
[LATEST]
[FILTER_BY_TS ts...]
[FILTER_BY_VALUE min max]
[WITHLABELS | <SELECTED_LABELS label...>]
[COUNT count]
[[ALIGN align] AGGREGATION aggregator bucketDuration [BUCKETTIMESTAMP bt] [EMPTY]]
FILTER filterExpr...
[GROUPBY label REDUCE reducer]
| 参数 |
类型 |
说明 |
可选值 / 说明 |
fromTimestamp |
integer |
查询起始时间戳,-: 最小值 |
必选 |
toTimestamp |
integer |
查询结束时间戳,+: 最大值 |
必选 |
LATEST |
flag |
对 compaction 类型的时间序列,返回最新(可能部分)的桶的聚合值 |
可选 |
FILTER_BY_TS ts... |
list of integers |
只返回指定时间戳的样本 |
可选 |
FILTER_BY_VALUE min max |
range |
只返回值在 [min, max] 区间的样本 |
可选 |
WITHLABELS |
flag |
返回样本的同时附带时间序列的所有标签 |
可选 |
<SELECTED_LABELS label...> |
list |
返回样本时只附带指定标签 |
可选,不能与 WITHLABELS 一起使用 |
COUNT count |
integer |
限制返回的样本数量(最多 count 个) |
可选 |
ALIGN align |
string |
对齐聚合桶的时间戳(如 start、end 或自定义时间戳) |
可选,需与 AGGREGATION 一起使用 |
AGGREGATION aggregator bucketDuration |
aggregation |
对数据进行聚合计算,aggregator 为聚合函数(如 avg, sum, min, max 等),bucketDuration 为桶的时长 |
可选 |
BUCKETTIMESTAMP bt |
string |
聚合桶时间戳选择,bt 可为 start 或 end |
可选 |
EMPTY |
flag |
即使桶为空也返回结果 |
可选 |
FILTER filterExpr... |
list of expressions |
过滤时间序列,根据标签匹配规则筛选出符合条件的序列 |
必选 |
GROUPBY label REDUCE reducer |
aggregation |
对返回结果按指定标签分组并应用 reducer 聚合函数(如 SUM, MIN, MAX 等) |
可选 |
TS.MRANGE - + FILTER metric=cpu
1) 1) "ts:cpu:server1"
2) (empty array)
3) 1) 1) (integer) 1767777655255
2) 80.5
2) 1) (integer) 1767777807933
2) 70.5
3) 1) (integer) 1767777873866
2) 80.5
4) 1) (integer) 1767777965870
2) 80.5
5) 1) (integer) 1767778300909
2) 90.5
6) 1) (integer) 1767778308125
2) 105.5
7) 1) (integer) 1767778308126
2) 115.5
2) 1) "ts:cpu:server2"
2) (empty array)
3) 1) 1) (integer) 1767777965870
2) 90.5
3) 1) "ts:cpu:server3"
2) (empty array)
3) 1) 1) (integer) 1767777965870
2) 70.5
TS.MRANGE - +
AGGREGATION avg 1000
FILTER metric=cpu
GROUPBY host REDUCE avg
1) 1) "host=server1"
2) (empty array)
3) 1) 1) (integer) 1767777655000
2) 80.5
2) 1) (integer) 1767777807000
2) 70.5
3) 1) (integer) 1767777873000
2) 80.5
4) 1) (integer) 1767777965000
2) 80.5
5) 1) (integer) 1767778300000
2) 90.5
6) 1) (integer) 1767778308000
2) 110.5
3️⃣ TS.MREVRANGE : 按标签过滤,逆序查询多个时间序列的区间数据
- 与 TS.MRANGE 类似,只是查询结果是逆序的
4️⃣ TS.QUERYINDEX : 根据标签过滤,返回匹配的时间序列 key 列表
S.QUERYINDEX filterExpr...
TS.QUERYINDEX metric=cpu host=server1
1) "ts:cpu:server1"
2) "ts:cpu:server2"
3) "ts:cpu:server3"
五、数据删除与维护类
| 命令 |
功能说明 |
典型使用场景 |
| TS.DEL |
删除某个时间序列在指定时间范围内的样本 |
清理异常数据、历史数据修正 |
TS.DEL key fromTimestamp toTimestamp
TS.DEL ts:cpu:server1 0 1767777965870
(integer) 4
六、元数据与状态查询类
| 命令 |
功能说明 |
典型使用场景 |
| TS.INFO |
返回时间序列的元信息与统计信息 |
排查问题、容量评估、监控状态 |
TS.INFO key [DEBUG]
TS.INFO ts:cpu:server1
1) totalSamples
2) (integer) 3
3) memoryUsage
4) (integer) 9184
5) firstTimestamp
6) (integer) 1767778300909
7) lastTimestamp
8) (integer) 1767778308126
9) retentionTime
10) (integer) 7200000
11) chunkCount
12) (integer) 1
13) chunkSize
14) (integer) 8192
15) chunkType
16) compressed
17) duplicatePolicy
18) last
19) labels
20) 1) 1) "host"
2) "server1"
2) 1) "metric"
2) "cpu"
3) 1) "env"
2) "prod"
21) sourceKey
22) (nil)
23) rules
24) (empty array)
25) ignoreMaxTimeDiff
26) (integer) 1000
27) ignoreMaxValDiff
28) "0.1"
真实案例
场景说明
- 假设我们有一个 IoT 设备监控系统,每台设备每分钟会上报一次温度和湿度数据。我们希望:
- 存储每台设备的时间序列数据。
- 查询最近一小时的数据。
- 统计每 5 分钟的平均温度和湿度。
- 获取最新的温度值。
步骤
TS.CREATE device:1001:temperature RETENTION 86400000 LABELS device_id 1001 type temperature
TS.CREATE device:1001:humidity RETENTION 86400000 LABELS device_id 1001 type humidity
TS.ADD device:1001:temperature * 26.5
TS.ADD device:1001:humidity * 60.2
EVAL "return redis.call('TIME')[1]*1000 - 3600000" 0
(integer) 1767777794000
TS.RANGE device:1001:temperature 1767777794000 +
1) 1) (integer) 1767781256846
2) 26.5
TS.RANGE device:1001:temperature 1767777794000 + AGGREGATION avg 300000
TS.GET device:1001:temperature
TS.MRANGE - + AGGREGATION avg 300000 FILTER type=temperature
1) 1) "device:1001:temperature"
2) (empty array)
3) 1) 1) (integer) 1767781200000
2) 26.5
所有评论(0)