首页 > 解决方案 > 在redis中有效地存储时间间隔

问题描述

我正在尝试使用 redis 跟踪服务器正常运行时间。

所以我选择的方法如下:

  1. 服务器xyz将继续发送我的服务ping,表明它在过去 30 秒内还活着并且正在工作。
  2. 我的服务将存储服务器处于活动状态的所有时间间隔的列表。这将通过{startTime, endTime}在 redis 中存储一个列表来完成,其中 key 作为服务器的名称 ( xyz)
  3. 根据用户查询,我将使用此列表生成服务器正常运行时间指标。比如两次(T1,T2)之间的停机时间百分比

示例:假设时间是T当前。

  1. 在 T+30,服务器发送一个 ping。 xyz:["{start:T end:T+30}"]

  2. 在 T+60,服务器发送另一个 ping xyz:["{start:T end:T+30}", "{start:T+30 end:T+60}"]

等等所有的ping。

这很好用,但一个问题是,在很长一段时间内,这个列表会得到很多元素。目前为了避免这种情况,在 ping 时,我弹出列表的最后一个元素,检查它是否可以与最新的时间间隔合并。如果可以合并,我会合并并将单个时间间隔推送到列表中。如果不是,则推送 2 个时间间隔。

因此,在第 2 步之后,我的列表变成了这样:xyz:["{start:T end:T+60}"]

我看到这种方法的一些问题是:

有没有更有效/优雅的方法来处理这个问题,比如在 redis 本身中处理时间间隔的合并?

标签: redis

解决方案


推荐阅读