配置参数
RedisTimeSeries 支持多个模块配置参数。所有这些参数只能在加载时设置。
在模块加载时设置配置参数
在加载时设置配置参数是通过在从命令行启动服务器时在 --loadmodule
参数后面附加参数,或在 Redis 配置文件中的 loadmodule
指令后面附加参数来完成的。例如
在 redis.conf 中
loadmodule ./redistimeseries.so [OPT VAL]...
从 Redis CLI 使用 MODULE LOAD 命令
127.0.0.6379> MODULE LOAD redistimeseries.so [OPT VAL]...
从命令行
$ redis-server --loadmodule ./redistimeseries.so [OPT VAL]...
RedisTimeSeries 配置参数
下表总结了哪些配置参数可以在模块加载时和运行时设置
配置参数 | 加载时 | 运行时 |
---|---|---|
NUM_THREADS (自 RedisTimeSeries v1.6) | ✅ | ⬜ |
COMPACTION_POLICY | ✅ | ⬜ |
RETENTION_POLICY | ✅ | ⬜ |
DUPLICATE_POLICY | ✅ | ⬜ |
ENCODING (自 RedisTimeSeries v1.6) | ✅ | ⬜ |
CHUNK_SIZE_BYTES | ✅ | ⬜ |
OSS_GLOBAL_PASSWORD (自 RedisTimeSeries v1.8.4) | ✅ | ⬜ |
IGNORE_MAX_TIME_DIFF (自 RedisTimeSeries v1.12) | ✅ | ⬜ |
IGNORE_MAX_VAL_DIFF (自 RedisTimeSeries v1.12 起) | ✅ | ⬜ |
NUM_THREADS
使用集群模式(TS.MRANGE、TS.MREVRANGE、TS.MGET 和 TS.QUERYINDEX)时,跨键查询每个分片的最大线程数。该值必须大于或等于 1。请注意,增加此值可能会提高或降低性能!
默认值
3
示例
$ redis-server --loadmodule ./redistimeseries.so NUM_THREADS 3
COMPACTION_POLICY
使用 TS.ADD
、TS.INCRBY
和 TS.DECRBY
新创建的键的默认压缩规则。
请注意,COMPACTION_POLICY
对使用 TS.CREATE
创建的键没有影响。要了解这种行为背后的动机,请考虑以下场景:假设定义了 COMPACTION_POLICY
,但随后有人希望手动创建额外的压缩规则(使用 TS.CREATERULE
),这需要首先创建空的目的地键(使用 TS.CREATE
)。但现在出现了问题:由于 COMPACTION_POLICY
,将不希望地为该目标键创建自动压缩。
每个规则由分号 (;
) 分隔,规则包含多个由冒号 (:
) 分隔的字段。
-
聚合类型:以下之一
聚合器 描述 avg
所有值的算术平均值 sum
所有值的总和 min
最小值 max
最大值 range
最高值和最低值之间的差 count
值的数量 first
桶中时间戳最小的值 last
桶中时间戳最大的值 std.p
值的总体标准差 std.s
值的样本标准差 var.p
值的总体方差 var.s
值的样本方差 twa
所有值的时权平均值 (自 RedisTimeSeries v1.8 起) -
每个时间桶的持续时间 - 数字和时间表示(例如,一分钟:
1M
、60s
或60000m
)- m - 毫秒
- s - 秒
- M - 分钟
- h - 小时
- d - 天
-
保留时间 - 数字和时间表示(例如,一分钟:
1M
、60s
或60000m
)- m - 毫秒
- s - 秒
- M - 分钟
- h - 小时
- d - 天
0m
、0s
、0M
、0h
或0d
表示没有过期。 -
(自 RedisTimeSeries v1.8 起)
可选:时间桶对齐 - 数字和时间表示(例如,一分钟:
1M
、60s
或60000m
)- m - 毫秒
- s - 秒
- M - 分钟
- h - 小时
- d - 天
确保在纪元之后正好有alignTimestamp开始的桶,并相应地对齐所有其他桶。默认值:0(与纪元对齐)。例如,如果bucketDuration 是 24 小时,将alignTimestamp 设置为
6h
(纪元后 6 小时)将确保每个桶的时间范围为 [06:00 .. 06:00)。
当定义了压缩策略时,将为新创建的时间序列自动创建压缩规则,它们的键将设置为
-
RedisTimeSeries v1.8 之前
key_dur_agg,其中key 是源时间序列的键,dur 是桶的持续时间,agg 是聚合器。
-
自 RedisTimeSeries v1.8 起
key_dur_agg_aln,其中key 是源时间序列的键,dur 是桶的持续时间,agg 是聚合器,aln 是对齐时间戳。
示例
max:1M:1h
- 使用max
在一分钟内进行聚合,并保留最后的小时twa:1d:0m:360M
- 使用twa
在 [06:00 .. 06:00) 范围内进行每日聚合;没有过期
默认值
没有压缩规则。
示例
$ redis-server --loadmodule ./redistimeseries.so COMPACTION_POLICY max:1m:1h;min:10s:5d:10d;last:5M:10m;avg:2h:10d;avg:3d:100d
RETENTION_POLICY
新创建键的默认保留时间(毫秒)。
保留时间是每个键的样本相对于最高报告时间戳的最大时间。样本仅根据其时间戳和随后传递到 TS.ADD
、TS.MADD
、TS.INCRBY
和 TS.DECRBY
调用的时间戳之间的差异进行过期。
值 0
表示没有过期。
当同时指定了 COMPACTION_POLICY
和 RETENTION_POLICY
时,新创建的压缩的保留时间将根据 COMPACTION_POLICY
中指定的保留时间。
默认值
0
示例
将默认保留时间设置为 300 天
$ redis-server --loadmodule ./redistimeseries.so RETENTION_POLICY 25920000000
DUPLICATE_POLICY
用于处理插入(TS.ADD
和 TS.MADD
)具有相同时间戳的多个样本的策略,以下值之一
策略 | 描述 |
---|---|
BLOCK |
忽略任何新报告的值并回复错误 |
FIRST |
忽略任何新报告的值 |
LAST |
用新报告的值覆盖 |
MIN |
仅在值低于现有值时覆盖 |
MAX |
仅在值高于现有值时覆盖 |
SUM |
如果先前存在样本,则将新样本添加到该样本中,以便更新后的值等于 (先前 + 新)。如果先前不存在样本,则将更新后的值设置为等于新值。 |
优先级顺序
由于重复策略可以在不同级别提供,因此实际使用的策略优先级将为
TS.ADD
的ON_DUPLICATE_policy
可选参数- 键级策略(如使用
TS.CREATE
和TS.ALTER
的DUPLICATE_POLICY
可选参数设置) DUPLICATE_POLICY
模块配置参数- 默认策略
默认值
默认策略为 BLOCK
。新键和现有键都将符合此默认策略。
示例
$ redis-server --loadmodule ./redistimeseries.so DUPLICATE_POLICY LAST
ENCODING
当配置了 COMPACTION_POLICY 时,自动创建的键的默认块编码。
可能的值:COMPRESSED
、UNCOMPRESSED
。
注意:在 RedisTimeSeries 1.6 之前,此配置参数名为 CHUNK_TYPE
。
默认值
COMPRESSED
示例
$ redis-server --loadmodule ./redistimeseries.so COMPACTION_POLICY max:1m:1h; ENCODING COMPRESSED
CHUNK_SIZE_BYTES
对于新创建的时间序列,每个新块的数据部分的默认初始分配大小(字节)。实际块可能会占用更多内存。
默认值
4096
示例
$ redis-server --loadmodule ./redistimeseries.so COMPACTION_POLICY max:1m:1h; CHUNK_SIZE_BYTES 2048
OSS_GLOBAL_PASSWORD
用于连接到其他分片的全局 Redis 社区版集群密码。
默认值
未设置
示例
$ redis-server --loadmodule ./redistimeseries.so OSS_GLOBAL_PASSWORD password
IGNORE_MAX_TIME_DIFF 和 IGNORE_MAX_VAL_DIFF
新创建键的默认值。
许多传感器会定期报告数据。通常,测量值与先前测量值之间的差异可以忽略不计,并且与随机噪声或测量精度限制有关。在这种情况下,最好不要将新的测量值添加到时间序列中。
如果满足以下条件,则新的样本将被视为重复并被忽略
- 时间序列不是压缩;
- 时间序列的
DUPLICATE_POLICY
是LAST
; - 样本按顺序添加 (
timestamp ≥ max_timestamp
); - 当前时间戳与先前时间戳的差 (
timestamp - max_timestamp
) 小于或等于IGNORE_MAX_TIME_DIFF
; - 当前值与先前最大时间戳处的值的绝对值差 (
abs(value - value_at_max_timestamp
) 小于或等于IGNORE_MAX_VAL_DIFF
。
其中 max_timestamp
是时间序列中时间戳最大的样本的时间戳,value_at_max_timestamp
是 max_timestamp
处的值。
默认值
IGNORE_MAX_TIME_DIFF
: 0
IGNORE_MAX_VAL_DIFF
: 0.0
示例
$ redis-server --loadmodule ./redistimeseries.so IGNORE_MAX_TIME_DIFF 1 IGNORE_MAX_VALUE_DIFF 0.1