redis为什么总是把订阅/发布和消息队列联系在一起?很迷惑,求解释~

上帝爱众生 发布于 2015/10/26 11:53
阅读 7K+
收藏 1

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

是这样,消息队列负责存储一些信息,然后用来持久化到数据库,主要用来解决高并发下减轻数据库的压力以及解决线程阻塞问题,而redis的pub/sub功能主要用来发布和订阅消息,而且消息是瞬时的,实在想象不到它和队列有什么关系。。现在假设我要解决一个抢红包的高并发的问题,我只需要让点击红包的用户存进redis的一个list里面,然后单开一个线程不断从list中读取数据进行持久化就行了,这样实现了队列功能,也解决了线程阻塞和数据库压力问题,和消息的发布订阅也没什么关系啊,难道是我理解有误?如果是这样,请大神指点,就以抢红包大并发为例,谢谢!
加载中
0
kaole
kaole

不知道LZ是在哪看到把发布/订阅和消息队列联系在一起的。

redis的发布/订阅, 是一种消息通信模式,一般可以用于及时通信系统,比如聊天室,实时提醒。主要是为了解耦消息发布者和消息订阅者之间的耦合。

就像你说的消息是瞬时的,来一个就要处理一个,在大并发下,并没有解决线程堵塞和数据库压力问题。

如果简单的消息队列,可以用redis的list结构处理,    或者选用专门的像rabbitmq等这样的

以上,纯属个人理解,有问题请告诉我,,,

上帝爱众生
上帝爱众生
回复 @kaole : 嗯嗯,,这几天看看能写个demo不,感觉有点无从下手,那个处理程序应该写在哪里,会不会随着tomcat的启动就开始运行?您有demo没有?有的话私信一下~谢谢你这么耐心~
kaole
kaole
回复 @空指针1993 : 既然要监控队列,后台肯定有个消费队列的程序运行,抢红包这样非常要求实时性的可以使用 POP的堵塞版本 BPOP,那样就会等到有元素时才继续执行, 也可以设置超时时间。
上帝爱众生
上帝爱众生
回复 @kaole : 嗯嗯,开辟线程专门用来读取redis队列,这样做的话线程池中的程序就得不停的进行下去,这样真的好吗?还是有更好些的办法?
kaole
kaole
回复 @空指针1993 : 没啥问题,通过push 和pop来取list中的数据,一般是LPUSH RPOP,通过先进先出的顺序
上帝爱众生
上帝爱众生
嗯嗯,谢谢您的回答,我也是刚刚接触,昨天写了个pub/sub的小demo,感觉和队列没什么关系,那么你看我上面关于队列的理解有偏差没?是靠线程池进行处理队列的吗?
0
盖世云鹏
盖世云鹏

这里边你所谓的单独起一个线程,实际上实现的就是监听嘛,消息发布者实际就是你在往队列里面压数据,而消息订阅者就是你写的线程来读取。

所以,这里面,队列是一种数据结构,而你所说的发布者/订阅者其实就是想要做的事的一种模式,通过队列来进行存储实现了,也不一定非用队列的,用SortSet进行值排序,一样可以称之为队列。

0
f
fufu669

用@scheudle去轮询redis吧。这也是订阅的一种方式。

0
j
jumppmuj

订阅发布个人感觉更多的会用在限流时的消息中间件的消息处理场景中

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部