配置参数

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.ADDTS.INCRBYTS.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 起)
  • 每个时间桶的持续时间 - 数字和时间表示(例如,一分钟:1M60s60000m

    • m - 毫秒
    • s - 秒
    • M - 分钟
    • h - 小时
    • d - 天
  • 保留时间 - 数字和时间表示(例如,一分钟:1M60s60000m

    • m - 毫秒
    • s - 秒
    • M - 分钟
    • h - 小时
    • d - 天

    0m0s0M0h0d 表示没有过期。

  • (自 RedisTimeSeries v1.8 起)

    可选:时间桶对齐 - 数字和时间表示(例如,一分钟:1M60s60000m

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

0 表示没有过期。

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

默认值

0

示例

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

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

DUPLICATE_POLICY

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

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

优先级顺序

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

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

默认值

默认策略为 BLOCK。新键和现有键都将符合此默认策略。

示例

$ redis-server --loadmodule ./redistimeseries.so DUPLICATE_POLICY LAST

ENCODING

当配置了 COMPACTION_POLICY 时,自动创建的键的默认块编码。

可能的值:COMPRESSEDUNCOMPRESSED

注意:在 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

新创建键的默认值。

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

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

  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_timestampmax_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
RATE THIS PAGE
Back to top ↑