Redis 数据库快照差异或其他建议用于 network/resource 监控的数据库

Redis database snapshot diffs or other suggested DB for network/resource monitoring

我有一个监控服务,可以轮询 REST API 以获取有关最新资源(hosts/list 许可证列表)的信息。监控服务缓存的所有这些数据都在 Redis 数据库中。一切都非常适合发现新资源。 但是,我面临的问题是当主机断开网络时。我面临的挑战是我无法知道主机已经从主机列表中消失了。 REST API 只给我一种查询主机列表的方法。 我可以提出的一种方法(理论上)是在不同的时间间隔对 rdb 进行比较。然而,这对我来说似乎效率不高,老实说,我不确定我将如何使用 Redis 做到这一点。

我正在寻找的建议可能是一些最适合这种操作的框架,或者如果需要的话,可能是一个不同的数据库,它可能与 redis 一样高效,但为我提供了进行差异分析所需的功能.时间序列数据库 spring 想到了,但我没有使用它们的经验,也不确定如何使用它们来精确解决这个问题。

除了 Redis 本身之外,没有必要求助于任何地方 - 只要您告诉它该做什么(就像任何其他软件 ;) 一样,它就足以继续满足您的需求。

以下是一个示例,但由于您没有指定如何缓存数据,为了简单起见,我假设您存储列表中的每个 host/license 都有一个密钥一些 string/binary 值,例如:

SET acme.org "some cached value"

你有很多这样的键,因为监控 REST API returns 一个列表,所以保持一切有序的常用方法是使用另一个键来存储每个返回的请求的列表API。您可以使用 Set:

SADD request:<timestamp> acme.org foo.bar ...

Sets 在这里特别有用,因为您可以执行 Set 操作,SDIFF and SINTER 和存储变体,以跟踪当前在线和掉线的主机。例如:

MULTI
SINTERSTORE online:<timestamp> request:<timestamp> request:<previous-timestamp>
SDIFFSTORE dropped:<timestamp> request:<timestamp> request:<previous-timestamp>
EXEC

注意:在缓存内容时,最好对所有相关键设置过期值 (TTL) 并使用适当的逐出策略。