如果我使用fire-and-forget从一个线程进行多个StackExchange.Redis调用,它们是否保证按顺序传递?
用例:我正在添加一个项目到Redis流,然后使用pub/sub触发另一个服务来处理该流。为了避免争用情况,我需要确保在pub/sub消息传递之前将项目添加到流中。
如果我使用fire-and-forget从一个线程进行多个StackExchange.Redis调用,它们是否保证按顺序传递?
用例:我正在添加一个项目到Redis流,然后使用pub/sub触发另一个服务来处理该流。为了避免争用情况,我需要确保在pub/sub消息传递之前将项目添加到流中。
1条答案
按热度按时间ivqmmu1c1#
虽然大多数StackExchange.Redis API都是线程安全的,但在您的场景中,通过SE.Redis发送的命令的交付顺序并不能得到“保证”,原因如下:
CommandFlags.Prefer*
/CommandFlags.Demand*
);我需要确保在发布/订阅消息传递之前将项目添加到流中。
我建议使用Lua script来解决这个问题,它将在同一个原子单元内针对同一个节点执行您的命令: