StackExchange.Redis 系列 7:pub/sub 消息顺序

  • 本系列博文是“伪”官方文档翻译,并非完全将官方文档进行翻译,而是我在查阅、测试原始文档并转换为自己东西后进行的“准”翻译。
  • 原始文档见此:https://stackexchange.github.io/StackExchange.Redis/
  • 本系列本博文基于 redis 5.0.6,系列中部分博文跟官方文档有出入,有不同见解 / 说明不当的地方,还请大家不吝拍砖。

当你使用 pub/sub 的时候,需要考虑在一个连接中,消息是顺序处理还是并行处理。StackExchange 推荐如果可以的话是并行处理。

顺序处理的好处是你不需要要担心线程安全,且处理消息的顺序和消息的发送顺序是一致的(通过队列),但问题是消息间有可能相互延时。

multiplexer.GetSubscriber().SubScribe("messages", (channel, message) => {
    Console.WriteLine((string)message);
    });

并发处理的好处是更快,可扩展性更高,一般消息间没有什么关联的时候用并发模式。并发的问题是因为消息是无序的,你需要自己保证并发消息不会破坏你的内部状态。

var channelMessageQueue = multiplexer.GetSubscriber().SubScribe("messages");
channel.OnMessage(message =>{
    Console.WriteLine((string)message.Message);
    });