redis的订阅、发布中,消息发送是顺序和阻塞的吗?

我最近在研究redis的订阅发布功能,我想确认两个问题:
1、redis在把消息发给所有订阅者时,是顺序阻塞发送的还是并发非阻塞发送的?
比如,发送给用户1成功后,再发送给用户2?还是并行的

2、对同一用户,多条消息是并发过来的,还是一条一条顺序发过来的?会产生消息顺序错乱的问题吗?

阅读 3.4k
1 个回答

先提一下 Redis 版本:

  • 5.0:新增 stream 数据类型;
  • 6.0:新增 多线程 特性;
  1. 当客户端有订阅的消息发布后,没有直接推送给 客户端,而是主线程执行完请求操作后,会把需要返回的结果写入缓冲区,然后,主线程会阻塞等待 IO 线程把这些结果回写到 Socket 中,并返回给客户端,IO 线程回写 Socket 时,是有多个线程在并发执行。
  2. 这个可能得看客户端具体的实现,比如一个组下是否多个消费者顺序拿到数据之后,接下来会不会顺序执行。(单连接内数据乱序这种问题不用考虑,读取是TCP保序的)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏