Redis键过期通知

8

有没有一种可靠的方法在Redis中通知键过期。根据Redis文档,Redis的键过期通知是不可靠的。

根据文档,“由于Redis Pub/Sub是“fire and forget”,目前没有办法使用此功能,如果您的应用程序需要可靠的事件通知,也就是说,如果您的Pub/Sub客户端断开连接并稍后重新连接,则在客户端断开连接期间传递的所有事件都将丢失。”

请问有人能建议一种通过Redis实现可靠键过期通知的方法,或者请建议一些其他Java数据库或机制,以便在数据到期时进行额外操作并通知数据到期。

1个回答

4
你可以通过让多个客户端订阅keyspace过期通知来提高通知的可靠性。
你可以将keyspace过期通知与实际过期键的处理分离,这样您就可以管理一次性地处理它们,并通过使keyspace过期通知客户端执行简单的排队任务来提高可靠性。为此,您可以使用Redis中的其他数据结构,例如set或sorted set(唯一值),甚至是带有Consumer Groups的Redis Streams
另一个选择是在实际键上设置另一个过期键。参见Event on key expire issue。如果您需要过期键的值,则这也很有用。

假设您要过期的键称为“foo”,在创建它时,请勿将其设置为过期状态,而是创建另一个名为“foo:expire”的键并在其中设置TTL。

... 在收到过期事件时,触发存储和删除“旧”数据('foo')的逻辑

在这种方法中,您可以包括恢复错过通知的逻辑。

谢谢Leo。我这里还有一个问题。据我所了解,Redis Streams可以让我们使用生产者和消费者/消费者组来流式传输消息。是否有一种方法可以使Redis Streams在x秒后或到期时发布消息? - Bhupesh Mathur
我的要求是,在一定时间内,如果没有对某个关键字进行额外的处理,它应该手动处理。 - Bhupesh Mathur
@BhupeshMathur,目前还没有自动发布到Redis流的方法,这意味着您仍然需要拥有自己的客户端订阅通知并将其排队到Redis流中。 - LeoMurillo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接