配置参数
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 现在使用一种新的共享密钥机制在集群节点之间发送内部命令。