在Redis中是否有关于密钥过期的可靠通知。从Redis文档中了解到,密钥过期通知是Redis是不可靠的。
根据文档,由于Redis Pub / Sub令人生畏,并且忘记了当前情况,如果您的应用程序需要可靠的事件通知,也就是说,如果Pub / Sub客户端断开连接并稍后重新连接,则目前无法使用此功能,客户端断开连接期间传递的所有事件都丢失了。
有人可以建议通过Redis获得可靠的密钥到期通知的方法,还是可以建议Java中的其他数据库或机制来使数据到期,并且该通知是为了在到期时对数据执行其他操作?
答案 0 :(得分:0)
您可以通过让多个客户端订阅键空间过期通知来提高通知的可靠性。
您可以将过期通知与过期密钥的实际处理分离开来,因此您可以设法仅处理它们一次,还可以通过让键空间过期通知客户端执行简单的排队任务来提高可靠性。为此,您可以使用Redis的其他数据结构,例如集合或排序集合(唯一值),甚至可以将Redis Streams与使用者组一起使用。
另一个选择是使另一个密钥(而不是实际密钥)失效。参见Event on key expire issue。如果您需要过期密钥的值,这也很有帮助。
假设您要创建的密钥在创建时称为“ foo” 不要使它过期,而是创建另一个名为“ foo:expire”的键,然后 在上面设置TTL。
... 收到到期事件后,触发逻辑来存储和删除 “旧”数据('foo')
采用这种方法,您可以包括从丢失的通知中恢复的逻辑。