我有一些事件应该累积到持久键值存储中。在密钥首次插入 24 小时后,应处理此累积记录并从存储中删除。过期的数据处理分布在多个节点之间,因此使用数据库涉及处理同步问题。我不想使用任何 SQL 数据库。最适合我的可能是一些根据我的需要配置过期策略的缓存。有吗?或者可以用一些No-SQL数据库解决这个问题吗?
infinispan或hazelcast这样的产品应该是可能的。
两者都与JSR107兼容。
使用与JSR107兼容的缓存API,一种可能的方法是通过CreatedExpiryPolicy设置24小时到期时间。接下来,实现并注册 CacheEntryExpiredListener,以便在条目过期时获取调用。
对 CacheEntryExpireListener 的调用可能是宽松的,并且依赖于实现。实际上,该事件是在"到期驱逐"时触发的。例如,一个实现可能执行 peridoc 扫描并每 30 分钟删除一次过期条目。但是,我认为"滞后时间"在大多数实现中是可调的,因此您将能够在定义的范围内进行操作。
还要检查您可能遇到的事件回调是否存在一些资源约束,例如线程池。
我提到infispan或hazelcast有两个原因:
- 您可能需要分发功能。
- 由于执行长时间运行的处理并存储不可恢复的数据,因此可能需要持久性和容错功能。所以我想说像谷歌番石榴这样的简单内存缓存超出了范围。
祝你好运!