配置参数
Redis 时间序列支持多种配置参数。
Redis Open Source - 设置配置参数
在 Redis Open Source (版本 8.0) 的 Redis 8 之前,所有时间序列配置参数都是加载时参数。请使用以下方法之一设置加载时配置参数的值
-
在启动
redis-server时,将其作为loadmodule参数后面的命令行参数传递redis-server --loadmodule ./{modulename}.so [可选值]... -
将其作为参数添加到配置文件(例如
redis.conf)中的loadmodule指令loadmodule ./{modulename}.so [可选值]... -
使用
MODULE LOAD path [arg [arg ...]]命令。 -
使用
MODULE LOADEX path [CONFIG name value [CONFIG name value ...]] [ARGS args [args ....]]命令。
从 Redis 8.0 开始,大多数时间序列配置参数都是运行时参数。虽然可以在加载时设置运行时参数,但使用 Redis CONFIG 命令更简单,并且与 Redis 运行时配置参数的工作方式相同。
这意味着
-
CONFIG SET parameter value [parameter value ...]设置一个或多个配置参数。
-
CONFIG GET parameter [parameter ...]读取一个或多个参数的当前值。
-
CONFIG REWRITE重写 Redis 配置文件(例如
redis.conf文件),以反映配置更改。
从 Redis 8.0 开始,您可以像设置 Redis 配置参数一样,直接在 Redis 配置文件中指定时间序列配置参数。
一旦使用 CONFIG SET 设置或手动添加到配置文件中的值,将覆盖通过 --loadmodule、loadmodule、MODULE LOAD 或 MODULE LOADEX 设置的值。
在集群中,必须在每个节点上分别运行 CONFIG SET 和 CONFIG REWRITE。
在 Redis 8.0 中,引入了时间序列配置参数的新名称,以与 Redis 配置参数的命名保持一致。使用 CONFIG 命令时必须使用新名称。
时间序列配置参数
| 参数名称 (版本 < 8.0) |
参数名称 (版本 ≥ 8.0) |
运行时 | Redis Software |
Redis Cloud |
|---|---|---|---|---|
| CHUNK_SIZE_BYTES | ts-chunk-size-bytes | ✅ | ✅ 支持 |
✅ 灵活和年度计划 |
| COMPACTION_POLICY | ts-compaction-policy | ✅ | ✅ 支持 |
✅ 灵活和年度计划 |
| DUPLICATE_POLICY | ts-duplicate-policy | ✅ | ✅ 支持 |
✅ 灵活和年度计划 |
| RETENTION_POLICY | ts-retention-policy | ✅ | ✅ 支持 |
✅ 灵活和年度计划 |
| ENCODING | ts-encoding | ✅ | ✅ 支持 |
✅ 灵活和年度计划 |
| IGNORE_MAX_TIME_DIFF | ts-ignore-max-time-diff | ✅ | ||
| IGNORE_MAX_VAL_DIFF | ts-ignore-max-val-diff | ✅ | ||
| NUM_THREADS | ts-num-threads | ⬜ | ✅ 支持 |
❌ 灵活和年度计划 |
| OSS_GLOBAL_PASSWORD | 在 v8.0 中已弃用 | ✅ |
CHUNK_SIZE_BYTES / ts-chunk-size-bytes
每个新块的数据部分的初始分配大小,以字节为单位。实际块可能消耗更多内存。更改此值不会影响现有块。
类型:整数
有效范围:[48 .. 1048576];必须是 8 的倍数
优先顺序
由于块大小可以在不同级别提供,因此块大小的实际优先顺序为
示例
将默认块大小设置为 1024 字节
版本 < 8.0
$ redis-server --loadmodule ./redistimeseries.so CHUNK_SIZE_BYTES 1024
版本 >= 8.0
redis> CONFIG SET ts-chunk-size-bytes 1024
COMPACTION_POLICY / ts-compaction-policy
使用 TS.ADD、TS.INCRBY 和 TS.DECRBY 创建的新键的默认压缩规则。
类型:字符串
请注意,此配置参数不影响使用 TS.CREATE 创建的键。要理解原因,请考虑以下场景:假设您定义了默认压缩策略,但随后想要手动创建额外的压缩规则(使用 TS.CREATERULE),这要求您首先创建一个空的目的地键(使用 TS.CREATE)。这种方法会产生问题:默认压缩策略将导致 Redis 自动为目的地键创建不需要的压缩。
每条规则由分号 (;) 分隔,规则由多个字段组成,这些字段由冒号 (:) 分隔
-
聚合类型:以下之一
聚合器 描述 avg所有值的算术平均值 sum所有值的总和 min最小值 max最大值 range最高值和最低值之间的差 count值的数量 first桶中时间戳最低的值 last桶中时间戳最高的值 std.p值的总体标准差 std.s值的样本标准差 var.p值的总体方差 var.s值的样本方差 twa所有值的时间加权平均值(自 v1.8 起) -
每个时间桶的持续时间 - 数字和时间表示(一分钟的示例:
1M,60s, 或60000m)- m - 毫秒
- s - 秒
- M - 分钟
- h - 小时
- d - 天
-
保留时间 - 数字和时间表示(一分钟的示例:
1M,60s, 或60000m)- m - 毫秒
- s - 秒
- M - 分钟
- h - 小时
- d - 天
0m,0s,0M,0h, 或0d表示永不过期。 -
(自 v1.8 起)
可选:时间桶对齐 - 数字和时间表示(一分钟的示例:
1M,60s, 或60000m)- m - 毫秒
- s - 秒
- M - 分钟
- h - 小时
- d - 天
确保存在一个从 Epoch 后正好 alignTimestamp 开始的桶,并相应地对齐所有其他桶。默认值:0(与 Epoch 对齐)。例如:如果 bucketDuration 是 24 小时,将 *alignTimestamp* 设置为
6h(Epoch 后 6 小时)将确保每个桶的时间范围为 [06:00 .. 06:00)。
定义压缩策略后,将自动为新创建的时间序列创建压缩规则,压缩键名称将是
-
如果时间桶对齐为 0
key_agg_dur,其中 key 是源时间序列的键,agg 是聚合器(大写),dur 是以毫秒为单位的桶持续时间。示例:
key_SUM_60000。 -
如果时间桶对齐不为 0
key_agg_dur_aln,其中 key 是源时间序列的键,agg 是聚合器(大写),dur 是以毫秒为单位的桶持续时间,aln 是以毫秒为单位的时间桶对齐。示例:
key_SUM_60000_1000。
优先顺序
ts-compaction-policy配置参数。- 无压缩规则。
示例规则
max:1M:1h- 使用max按一分钟窗口聚合,并保留最后一小时twa:1d:0m:360M- 使用twa按天聚合 [06:00 .. 06:00);永不过期
示例
设置一个包含 5 条压缩规则的压缩策略
版本 < 8.0
$ redis-server --loadmodule ./redistimeseries.so COMPACTION_POLICY max:1m:1h;min:10s:5d:10d;last:5M:10m;avg:2h:10d;avg:3d:100d
版本 >= 8.0
redis> CONFIG SET ts-compaction-policy max:1m:1h;min:10s:5d:10d;last:5M:10m;avg:2h:10d;avg:3d:100d
DUPLICATE_POLICY / ts-duplicate-policy
处理插入(TS.ADD 和 TS.MADD)具有相同时间戳的多个样本的默认策略,取以下值之一
| 策略 | 描述 |
|---|---|
BLOCK |
忽略任何新报告的值并回复错误 |
FIRST |
忽略任何新报告的值 |
LAST |
用新报告的值覆盖 |
MIN |
仅当值小于现有值时覆盖 |
MAX |
仅当值大于现有值时覆盖 |
SUM |
如果存在之前的样本,则将新样本添加到其中,以便更新后的值等于(之前的值 + 新值)。如果不存在之前的样本,则将更新后的值设置为等于新值。 |
默认值在创建每个新时间序列时应用。
类型:字符串
优先顺序
由于重复策略可以在不同级别提供,因此重复策略的实际优先顺序为
TS.ADD命令的ON_DUPLICATE_POLICY可选参数。- 键级别策略,通过
TS.CREATE和TS.ALTER命令的DUPLICATE_POLICY可选参数设置。 ts-duplicate-policy配置参数。- 硬编码默认值:
BLOCK
RETENTION_POLICY / ts-retention-policy
新创建的键的默认保留期,以毫秒为单位。
保留期是与每个键报告的最高时间戳相比的样本最大年龄。样本仅基于其时间戳与传递给后续 TS.ADD、TS.MADD、TS.INCRBY 和 TS.DECRBY 调用的时间戳之间的差值进行过期。
类型:整数
有效范围:[0 .. 9,223,372,036,854,775,807]
值 0 表示永不过期。
当同时指定 COMPACTION_POLICY / ts-compaction-policy 和 RETENTION_POLICY / ts-retention-policy 时,新创建的压缩的保留期根据 COMPACTION_POLICY / ts-compaction-policy 中指定的保留时间确定。
优先顺序
由于保留期可以在不同级别提供,因此保留期的实际优先顺序为
示例
将默认保留期设置为 300 天
版本 < 8.0
$ redis-server --loadmodule ./redistimeseries.so RETENTION_POLICY 25920000000
版本 >= 8.0
redis> CONFIG SET ts-retention-policy 25920000000
ENCODING / ts-encoding
注意:在 v1.6 之前,此配置参数名为 CHUNK_TYPE。
配置 ts-compaction-policy 时自动创建的压缩的默认块编码。
类型:字符串
有效值:COMPRESSED(压缩)、UNCOMPRESSED(未压缩)
优先顺序
ts-encoding配置参数。- 硬编码默认值:
COMPRESSED
示例
将默认编码设置为 UNCOMPRESSED
版本 < 8.0
$ redis-server --loadmodule ./redistimeseries.so ENCODING UNCOMPRESSED
版本 >= 8.0
redis> CONFIG SET ts-encoding UNCOMPRESSED
IGNORE_MAX_TIME_DIFF / ts-ignore-max-time-diff 和 IGNORE_MAX_VAL_DIFF / ts-ignore-max-val-diff
新创建的键的默认值。
类型
ts-ignore-max-time-diff:整数ts-ignore-max-val-diff:双精度浮点数
有效范围
ts-ignore-max-time-diff:[0 .. 9,223,372,036,854,775,807]ts-ignore-max-val-diff:[0 .. 1.7976931348623157e+308]
许多传感器定期报告数据。通常,测量值与先前测量值之间的差异可以忽略不计,并且与随机噪声或测量精度限制有关。在这种情况下,最好不要将新的测量值添加到时间序列中。
如果满足以下条件,新样本将被视为重复并被忽略
- 时间序列不是压缩。
- 时间序列的
ts-duplicate-policy是LAST。 - 样本是按顺序添加的(
timestamp ≥ max_timestamp)。 - 当前时间戳与先前时间戳的差值 (
timestamp - max_timestamp) 小于或等于ts-ignore-max-time-diff。 - 当前值与先前最大时间戳处的值的绝对差值 (
abs(value - value_at_max_timestamp) 小于或等于ts-ignore-max-val-diff。
其中 max_timestamp 是时间序列中时间戳最大的样本的时间戳,value_at_max_timestamp 是 max_timestamp 处的值。
优先顺序
ts-ignore-max-time-diff和ts-ignore-max-val-diff配置参数。- 硬编码默认值:
0和0.0。
示例
版本 < 8.0
$ redis-server --loadmodule ./redistimeseries.so IGNORE_MAX_TIME_DIFF 10 IGNORE_MAX_VAL_DIFF 0.1
版本 >= 8.0
redis> CONFIG SET ts-ignore-max-time-diff 10 ts-ignore-max-val-diff 0.1
NUM_THREADS / ts-num-threads
使用集群模式 (TS.MRANGE、TS.MREVRANGE、TS.MGET 和 TS.QUERYINDEX) 时,每个分片的跨键查询的最大线程数。该值必须大于或等于 1。请注意,增加此值可能会提高或降低性能!
类型:整数
有效范围:[1..16]
Redis Open Source 默认值:3
Redis Software 默认值:由计划设置,并在更改计划时自动更新。
Redis Cloud 默认值
- 灵活和年度计划:由计划设置
- 免费和固定计划:
1
示例
版本 < 8.0
$ redis-server --loadmodule ./redistimeseries.so NUM_THREADS 3
版本 >= 8.0
redis> redis-server --loadmodule ./redistimeseries.so ts-num-threads 3
OSS_GLOBAL_PASSWORD
在 8.0 版本之前,在集群中使用时间序列时,必须在所有集群节点上设置 OSS_GLOBAL_PASSWORD 配置参数。从 8.0 版本开始,Redis 不再使用此参数,如果存在则忽略它。Redis 现在使用一种新的共享密钥机制在集群节点之间发送内部命令。