redis - 在redis中有效地存储时间间隔
问题描述
我正在尝试使用 redis 跟踪服务器正常运行时间。
所以我选择的方法如下:
- 服务器
xyz
将继续发送我的服务ping
,表明它在过去 30 秒内还活着并且正在工作。 - 我的服务将存储服务器处于活动状态的所有时间间隔的列表。这将通过
{startTime, endTime}
在 redis 中存储一个列表来完成,其中 key 作为服务器的名称 (xyz
) - 根据用户查询,我将使用此列表生成服务器正常运行时间指标。比如两次(T1,T2)之间的停机时间百分比
示例:假设时间是T
当前。
在 T+30,服务器发送一个 ping。
xyz:["{start:T end:T+30}"]
在 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 本身中处理时间间隔的合并?
解决方案
推荐阅读
- node.js - create-react-app 只创建 package.json 文件
- haskell - 除了二叉搜索树之外,是否有任何有效的数据结构来表示 Set
- python - 熊猫读取将连续标题转换为列的数据框
- c# - 生成捆绑文件时应用程序清单文件错误
- php - 上传 laravel5.4 文件大小的文件
- ios - 约束导致的崩溃
- java - 由于简单的 JSON 依赖,Jar 文件错误
- makefile - 将一般依赖项与特定依赖项结合起来
- python - 在大量分类变量上使用 get_dummies() 和 OneHotEncoding
- react-native - 反应原生从本地存储上传视频