我有一个监控服务,可以轮询REST API以获取有关最新资源(主机列表/许可证列表)的信息。监控服务缓存Redis数据库中的所有这些数据。一切都非常适合发现新资源。 但是,我面临的问题是主机何时从网络中断开。我面临的挑战是我无法知道主机已从主机列表中消失。 REST API只为我提供了一种查询主机列表的方法。 我可以提出的一种方法(理论上)是以不同的时间间隔取rdb的差异。然而,这对我来说似乎并不高效,老实说,我不确定如何用redis做到这一点。
我正在寻找的建议是,可能是一些最适合这种操作的框架,或者如果需要的是一个可能与redis一样高效的不同数据库,但却给了我需要采取差异的功能。时间序列数据库浮现在脑海中,但我对它们没有经验,也不确定它们如何用于精确解决这个问题。
答案 0 :(得分:1)
除了Redis本身之外,没有必要求助于它 - 只要你告诉它做什么(就像任何其他软件一样),它就足以继续满足你的要求。)
以下是一个示例,但由于您没有指定缓存数据的方式,因此为了简单起见,我假设您的列表中每个主机/许可证都有一个密钥,您可以在其中存储一些字符串/二进制文件价值,如:
SET acme.org "some cached value"
你有很多这样的密钥,因为监控REST API会返回一个列表,所以保持一切顺序的常用方法是使用另一个密钥来存储API返回的每个请求的列表。您可以使用Set:
实现这一目标SADD request:<timestamp> acme.org foo.bar ...
集合在这里特别有用,因为您可以在您的情况下执行Set operations,SDIFF
和SINTER
以及store-variants,以跟踪当前在线和已删除的主机。例如:
MULTI
SINTERSTORE online:<timestamp> request:<timestamp> request:<previous-timestamp>
SDIFFSTORE dropped:<timestamp> request:<timestamp> request:<previous-timestamp>
EXEC
注意:当您缓存事物时,最好将所有相关密钥的到期值(TTL)并使用适当的驱逐策略。