0

我正在寻找一个存储时间戳值并自动删除早于特定时间窗口的系统。

类似于RoundRobin系统,但据我所知,RoundRobin是基于特定数量的记录,并删除尽可能多的旧记录和新记录。

在这个系统中,可以是任意数量的记录,只删除比特定时间间隔更早的记录。

一个近似值可以是一个系统,其中每条记录都有一个超时时间,例如:

console.append "key", { :value => "value1", :timeout => 10.minutes_in_the_future }
console.append "key", { :value => "value2", :timeout => 10.minutes_in_the_future }
console.append "key", { :value => "value3", :timeout => 10.minutes_in_the_future }

不知何故,系统负责删除任何过期的记录。

该系统可以基于任何高性能存储系统(Redis,Memcache,...)

我不是在寻找完整详细的解释实现,只是某种灵感或任何相关文章或现有系统,所以我不是在重新发明轮子

4

1 回答 1

0

Memcache aprox

在办公室里,我们正在研究这个 aprox:

前提条件

  • 时间窗口10 分钟
  • 我们只需要知道记录的数量而不是值。
  • 我们可以忍受不是很准确的解决方案。

执行

  1. 每分钟创建一个新密钥mykey_<Time.now.strftime("%Y%m%d%H%M")>,例如: .
  2. 给他们10 分钟过期时间
  3. 每次我们想要添加记录时,我们都是实际分钟incr的关键。
  4. 为了计算时间窗口值,我们获取最后 10 分钟的10 个键的值并将它们相加

缺点

  • 我们不能存储真正的值,但只能累积一个
  • 当每1 分钟密钥过期时,总值会突然波动
于 2012-01-13T10:23:38.880 回答