配置参数
提示
来自deepseek解释
原文链接:https://redis.io/docs/latest/develop/data-types/timeseries/configuration/
Redis 开源版 - 设置配置参数
在 Redis 开源版 8.0 版本之前,所有时间序列配置参数均为加载时参数。 请使用以下方法之一设置加载时配置参数的值:
在启动
redis-server时,将它们作为loadmodule参数后的命令行参数传递:redis-server --loadmodule ./{modulename}.so [OPT VAL]...在配置文件中(例如
redis.conf),将它们作为loadmodule指令的参数添加:loadmodule ./{modulename}.so [OPT VAL]...使用
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 命令时必须使用新名称。
另请参阅 Redis 配置。
时间序列配置参数
| 参数名称 (版本 < 8.0) | 参数名称 (版本 ≥ 8.0) | 运行时 | Redis Software | Redis Cloud |
|---|---|---|---|---|
| CHUNK_SIZE_BYTES | ts-chunk-size-bytes | ✅ | ✅ 支持 | ✅ Flexible & Annual |
| COMPACTION_POLICY | ts-compaction-policy | ✅ | ✅ 支持 | ✅ Flexible & Annual |
| DUPLICATE_POLICY | ts-duplicate-policy | ✅ | ✅ 支持 | ✅ Flexible & Annual |
| RETENTION_POLICY | ts-retention-policy | ✅ | ✅ 支持 | ✅ Flexible & Annual |
| ENCODING | ts-encoding | ✅ | ✅ 支持 | ✅ Flexible & Annual |
| IGNORE_MAX_TIME_DIFF | ts-ignore-max-time-diff | ✅ | ||
| IGNORE_MAX_VAL_DIFF | ts-ignore-max-val-diff | ✅ | ||
| NUM_THREADS | ts-num-threads | ⬜ | ✅ 支持 | ❌ Flexible & Annual |
| 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 1024COMPACTION_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)。
在集群环境中,如果设置了此配置参数,您必须为所有时间序列键名使用 哈希标签。这确保 Redis 会将每个压缩创建在与源键相同的哈希槽中。如果不这样做,系统可能无法压缩数据且不显示任何错误消息。
当定义了压缩策略时,会为新创建的时间序列自动创建压缩规则,压缩键名将为:
如果时间桶对齐为 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:100dDUPLICATE_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 25920000000ENCODING / 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 UNCOMPRESSEDIGNORE_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.1NUM_THREADS / ts-num-threads
在集群模式下用于跨键查询(TS.MRANGE、TS.MREVRANGE、TS.MGET 和 TS.QUERYINDEX)的每个分片线程的最大数量。该值必须大于或等于 1。请注意,增加此值可能提高或降低性能!
类型:整数
有效范围:[1..16]
Redis 开源版默认值:3
Redis Software 默认值:由计划设定,并在您更改计划时自动更新。
Redis Cloud 默认值:
- Flexible & Annual:由计划设定
- Free & Fixed:
1
示例
版本 < 8.0:
$ redis-server --loadmodule ./redistimeseries.so NUM_THREADS 3版本 >= 8.0:
redis> redis-server --loadmodule ./redistimeseries.so ts-num-threads 3OSS_GLOBAL_PASSWORD
在 8.0 版本之前,在集群中使用时间序列时,您必须在所有集群节点上设置 OSS_GLOBAL_PASSWORD 配置参数。从 8.0 版本开始,Redis 不再使用此参数,如果存在则会忽略它。Redis 现在使用一种新的共享秘密机制在集群节点之间发送内部命令。