java - Redis 密钥过期通知
问题描述
有没有办法在 Redis 中获得关于密钥到期的可靠通知。正如我从 Redis 文档中了解到的那样,密钥到期通知是 Redis 不可靠的。
根据文档,由于 Redis Pub/Sub 已启动并忘记,如果您的应用程序需要可靠的事件通知,则无法使用此功能,也就是说,如果您的 Pub/Sub 客户端断开连接并稍后重新连接,则所有事件在客户端断开连接期间交付的内容会丢失。
有人可以建议一种通过 Redis 获得可靠的密钥到期通知的方法,或者请建议 Java 中的其他一些数据库或机制来实现数据到期,并且它的通知是为了对到期数据执行额外的操作。
解决方案
您可以通过让多个客户端订阅键空间过期通知来提高通知的可靠性。
您可以将过期通知与过期密钥的实际处理分离,因此您可以设法只处理它们一次,并通过让密钥空间过期通知客户端执行简单的排队任务来提高可靠性。为此,您可以使用 Redis 中的其他数据结构,例如集合或排序集(唯一值),甚至是带有消费者组的Redis 流。
另一种选择是使另一个密钥而不是实际密钥过期。请参阅有关密钥过期问题的事件。如果您需要过期键的值,这也很有帮助。
假设您的即将过期的密钥称为“foo”,当您创建它时不会使其过期,而是创建另一个名为“foo:expire”的密钥并在其上设置 TTL。
...收到过期事件后,触发逻辑以存储和删除“旧”数据('foo')
在这种方法中,您可以包含从丢失通知中恢复的逻辑。
推荐阅读
- websocket - AsyncAPI:如果两端都作为生产者和消费者,将使用多少个 websocket?
- angular - 不能绑定到“粘性”,因为它不是“kendo-grid-column”的已知属性
- leaflet - 同一位置的多个标记上的传单工具提示问题
- google-apps-script - 如何从 CalendarApp.CalendarEvent 访问视频链接?
- java - 无法解析 m1 macbook air 上的符号“字符串”
- postgresql - 为什么 Flask-SQLAlchemy 在 SELECT 查询后会回滚
- python - Python:无法将 numpy 数组转换为字符串
- java - 使用spring boot从属性文件加载枚举映射
- python - 无法在带有 python selenium 的 wordpress 中单击“使用此文件”
- python - python:将文件导入另一个子目录