配置参数
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
Example
$ redis-server --loadmodule ./redistimeseries.so NUM_THREADS 3
压缩策略
新创建的键的默认压缩规则适用于TS.ADD
、TS.INCRBY
和TS.DECRBY
。
请注意,COMPACTION_POLICY
对使用 TS.CREATE
创建的键没有影响。为了理解这种行为的动机,考虑以下场景:假设定义了 COMPACTION_POLICY
,但随后想要手动创建额外的压缩规则(使用 TS.CREATERULE
),这需要首先创建一个空的目标键(使用 TS.CREATE
)。但现在有一个问题:由于 COMPACTION_POLICY
,自动压缩会不必要地为该目标键创建。
每条规则由分号(;
)分隔,规则由多个字段组成,字段之间用冒号(:
)分隔:
-
聚合类型:以下之一:
aggregator description 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);无过期时间
默认
没有压缩规则。
Example
$ redis-server --loadmodule ./redistimeseries.so COMPACTION_POLICY max:1m:1h;min:10s:5d:10d;last:5M:10m;avg:2h:10d;avg:3d:100d
保留策略
新创建密钥的默认保留期限,以毫秒为单位。
保留期是每个键的样本与最高报告时间戳相比的最大年龄。样本的过期仅基于其时间戳与后续传递给TS.ADD
、TS.MADD
、TS.INCRBY
和TS.DECRBY
调用的时间戳之间的差异。
值 0
表示没有过期。
当同时指定COMPACTION_POLICY
和RETENTION_POLICY
时,新创建的压缩的保留时间将根据COMPACTION_POLICY
中指定的保留时间来确定。
默认
0
Example
将默认保留时间设置为300天:
$ redis-server --loadmodule ./redistimeseries.so RETENTION_POLICY 25920000000
重复策略
处理插入多个具有相同时间戳的样本的策略(TS.ADD
和 TS.MADD
),具有以下值之一:
策略 | 描述 |
---|---|
BLOCK |
忽略任何新报告的值并回复错误 |
FIRST |
忽略任何新报告的值 |
LAST |
用新报告的值覆盖 |
MIN |
仅当值低于现有值时覆盖 |
MAX |
仅当值高于现有值时才覆盖 |
SUM |
如果存在先前的样本,将新样本添加到其中,使更新后的值等于(先前 + 新)。如果不存在先前的样本,则将更新后的值设置为新值。 |
优先级顺序
由于可以在不同级别提供重复策略,实际使用的策略优先级将是:
TS.ADD
的ON_DUPLICATE_policy
可选参数- 键级别策略(通过
TS.CREATE
和TS.ALTER
的DUPLICATE_POLICY
可选参数设置) DUPLICATE_POLICY
模块配置参数- 默认策略
默认
默认策略是BLOCK
。新密钥和现有密钥都将遵循此默认策略。
Example
$ redis-server --loadmodule ./redistimeseries.so DUPLICATE_POLICY LAST
编码
当配置了COMPACTION_POLICY时,自动创建键的默认块编码。
可能的取值:COMPRESSED
, UNCOMPRESSED
.
注意:在 RedisTimeSeries 1.6 之前,此配置参数名为 CHUNK_TYPE
。
默认
COMPRESSED
Example
$ redis-server --loadmodule ./redistimeseries.so COMPACTION_POLICY max:1m:1h; ENCODING COMPRESSED
CHUNK_SIZE_BYTES
默认初始分配大小,以字节为单位,用于新创建的时间序列的每个新块的数据部分。实际块可能会消耗更多内存。
默认
4096
Example
$ redis-server --loadmodule ./redistimeseries.so COMPACTION_POLICY max:1m:1h; CHUNK_SIZE_BYTES 2048
OSS全局密码
用于连接到其他分片的全局Redis社区版集群密码。
默认
未设置
Example
$ 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
Example
$ redis-server --loadmodule ./redistimeseries.so IGNORE_MAX_TIME_DIFF 1 IGNORE_MAX_VALUE_DIFF 0.1