这个问题是针对Redis的,但也可以针对hazelcast。
有没有一种方法可以让多个示例在Redis数据结构上工作而不需要锁?
示例:
假设您在Redis上存储了一个队列。
当应用程序收到API请求时,它会从队列中获取元素,进行一些处理,然后将元素作为API响应返回。
有没有一种方法能使它在某种程度上满足以下要求:
1.元素不会丢失。这意味着如果从队列中取出元素,并且应用程序重新启动,在处理完它们之前,元素将返回到队列中。
1.元素由单个使用者读取。这意味着,如果消息当前由一个使用者处理,则没有其他使用者将拾取它。
处理事务似乎满足1但失败2,出队消息满足2但失败1。
有没有办法同时满足这两种需求?
1条答案
按热度按时间oalqel3c1#
对于Hazelcast,请尝试事务队列
如果您执行IQueue.take()或TransactionalQueue.take(),则只有一个使用者会收到消息。
对于事务性队列,如果事务进入回滚,则取出的项位于队列的前端。
请注意,事务隔离会影响顺序性语义。一个队列可能包含“A"、“B”和“C"。正如您所期望的那样,事务Take将持有“A"。当事务正在运行时,下一个Take将获得“B"。如果事务中止,下一个Take将获得“A"。