配置参数
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