Java Aerospike TTL监听器

Java Aerospike TTL监听器,java,aerospike,ttl,Java,Aerospike,Ttl,我正在用Aerospike做POC。它似乎适合我所有的需要,除了一个。当我在一条记录上设置一个TTL时,它会在TTL到期后按预期到期,但我有一个要求,我希望aerospike在记录被逐出时通知我。这可能吗?您可以使用自定义项获取记录TTL,并与当前时间进行比较 此处给出了一个框架UDF: 本地函数获取元数据(rec) 返回记录。ttl(rec); 结束 我怀疑,如果您定期为每个记录执行此操作,那么这将是相当大的资源负担,但有可能让您的应用程序每隔一段时间运行一次UDF,并在记录即将到期时pin

我正在用Aerospike做POC。它似乎适合我所有的需要,除了一个。当我在一条记录上设置一个TTL时,它会在TTL到期后按预期到期,但我有一个要求,我希望aerospike在记录被逐出时通知我。这可能吗?

您可以使用自定义项获取记录TTL,并与当前时间进行比较

此处给出了一个框架UDF:

本地函数获取元数据(rec) 返回记录。ttl(rec); 结束

我怀疑,如果您定期为每个记录执行此操作,那么这将是相当大的资源负担,但有可能让您的应用程序每隔一段时间运行一次UDF,并在记录即将到期时ping一个通知


如果您查看的是更一般的级别,您可以为NSUP(这是处理过期和逐出的子系统)grep日志,并且有一条明确的日志消息指示NSUP何时删除记录。

Aerospike不会为您现成地做这件事。您可以通过运行定期扫描作业来完成此操作。在扫描策略中,可以将IncludeBinda设置为false。这将是一个非常有效的扫描,因为它将只返回记录的元数据。在元数据中,您可以检查ttl并读取即将过期的完整记录

感谢您对Aerospike的兴趣。 您希望Aerospike如何通知您

我们已经收到这个请求很长时间了,并且已经考虑过实现。分布式系统中存在许多问题

例如,我们可以将日志文件条目写入一个特殊的“过期文件”。当然,当服务器崩溃时,这些数据可能会丢失,因此不是冗余的

另一种机制是插入队列,或执行网络事件(REST调用)。这还需要一个分布式日志来确保通知不会被丢弃(Aerospike通过其跨数据中心功能做到了这一点)

因此,我对您喜欢的通知机制感兴趣


Ben Bates建议的方法是使用Scan UDF函数将过期时间移到这种UDF扫描中。然后,在UDF中,您还可以通知。这应该是可行的,但是您需要将TTL放在一个箱子中,而不是使用标准的TTL机制。这肯定会比C中的标准TTL机制效率低,但可能会提供您所需要的。

REST调用将非常好。请与Redis进行比较。您可以在打开事件通知的情况下启动redis,还可以配置您希望redis服务器通知的事件类型(如写入、读取、过期等),这样您就可以订阅服务器,并且在发生事件时,您的事件处理程序会被触发。这样的东西对aerospike非常有用。我正在考虑使用aerospike,但这是我的一项要求,我不能每次都进行查询以检查即将过期的内容,也不能解析日志。这在性能上并不好,而且是一个业余的解决方案。@CesarVillasana好吧,必须有人定期检查密钥是否即将过期,无论是在DB还是在客户端执行,这都是超级非最优的。Redis实现了密钥过期的半被动方式,这就是为什么只有在密钥被删除时才会收到过期事件,而不是在密钥过期时收到过期事件。“超级非最优”。不是真的,Aerospike有效地终止密钥。如果你读或写,它会被检查,如果你不读或写,它会被定期检查。这些都是高效的RAM索引,即使每个用户有几十亿个密钥,运行它们也不算太糟糕。Aerospike的事件通知系统刚刚进入早期访问;如果你感兴趣的话,你应该联系他们。