配置参数

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.ADDTS.INCRBYTS.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.ADDTS.MADDTS.INCRBYTS.DECRBY调用的时间戳之间的差异。

0 表示没有过期。

当同时指定COMPACTION_POLICYRETENTION_POLICY时,新创建的压缩的保留时间将根据COMPACTION_POLICY中指定的保留时间来确定。

默认

0

Example

将默认保留时间设置为300天:

$ redis-server --loadmodule ./redistimeseries.so RETENTION_POLICY 25920000000

重复策略

处理插入多个具有相同时间戳的样本的策略(TS.ADDTS.MADD),具有以下值之一:

策略 描述
BLOCK 忽略任何新报告的值并回复错误
FIRST 忽略任何新报告的值
LAST 用新报告的值覆盖
MIN 仅当值低于现有值时覆盖
MAX 仅当值高于现有值时才覆盖
SUM 如果存在先前的样本,将新样本添加到其中,使更新后的值等于(先前 + 新)。如果不存在先前的样本,则将更新后的值设置为新值。

优先级顺序

由于可以在不同级别提供重复策略,实际使用的策略优先级将是:

  1. TS.ADDON_DUPLICATE_policy可选参数
  2. 键级别策略(通过TS.CREATETS.ALTERDUPLICATE_POLICY可选参数设置)
  3. DUPLICATE_POLICY 模块配置参数
  4. 默认策略

默认

默认策略是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

新创建键的默认值。

许多传感器会定期报告数据。通常,测量值与之前的测量值之间的差异可以忽略不计,这与随机噪声或测量精度限制有关。在这种情况下,可能更倾向于不将新的测量值添加到时间序列中。

如果满足以下条件,新样本将被视为重复并被忽略:

  1. 时间序列不是压缩的;
  2. 时间序列的 DUPLICATE_POLICYLAST;
  3. 样本按顺序添加(timestamp ≥ max_timestamp);
  4. 当前时间戳与前一个时间戳的差值(timestamp - max_timestamp)小于或等于IGNORE_MAX_TIME_DIFF
  5. 当前值与上一个最大时间戳处的值的绝对差值(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
RATE THIS PAGE
Back to top ↑