gpt4 book ai didi

redis - 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

转载 作者:行者123 更新时间:2023-12-03 06:37:33 24 4
gpt4 key购买 nike

我正在努力思考 Redis 的时间序列规则创建是如何工作的,我很困惑为什么 Redis 会忽略聚合中的最后一项,并且想知道这是否是预期的行为。

我在 redis-cli 中创建了一个示例代码来说明:

127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> TS.CREATE source
OK
127.0.0.1:6379> TS.CREATE sumRule
OK
127.0.0.1:6379> TS.CREATERULE source sumRule AGGREGATION sum 1
OK
127.0.0.1:6379> TS.ADD source * 1
(integer) 1592638841406
127.0.0.1:6379> TS.ADD source * 2
(integer) 1592638843446
127.0.0.1:6379> TS.ADD source * 3
(integer) 1592638846536
127.0.0.1:6379> TS.ADD source * 4
(integer) 1592638849085
127.0.0.1:6379> TS.GET sumRule
1) (integer) 1592638846536
2) 3

我预计这里的最后一项是 4 而不是 3。这是预期的行为吗,因为它需要向后看才能进行聚合?或者是否需要多个值才能进行聚合?

最佳答案

感谢您试用 RedisTimeSeries。

让我们分解实际发生的事情,然后我会解释原因。创建规则时,您需要指定 2 个参数:聚合类型和桶大小。(这里的一个重要注意事项是桶大小以毫秒而不是秒为单位)

一旦你有了规则,每个被添加的样本都会被用来计算当前的聚合值,一旦桶上下文结束,我们就会将值刷新到下采样键。我们怎么知道桶上下文结束了?如果您有 5 秒的桶,我们将保持上下文打开,直到我们得到一个超出 5 秒范围的样本。

那么为什么你只看到前一个桶?有两个原因:

  1. 这是一种优化,可避免打开下采样 key 并写入样本(覆盖样本是 CPU 密集型操作,因为我们已压缩数据结构以将数据保存在内存中)
  2. API - 我们不希望返回部分存储桶以避免显示“正在运行”的数据。

我希望这能回答您的问题。

关于redis - 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62483060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com