鍍金池/ 問答/人工智能  PHP/ Redis的隊(duì)列和消息隊(duì)列的區(qū)別是什么?

Redis的隊(duì)列和消息隊(duì)列的區(qū)別是什么?

最近看到一篇文章https://segmentfault.com/a/11... 里面有兩句是這樣的:

lpush+rpop=Queue(隊(duì)列)
lpush+brpop=Message Queue(消息隊(duì)列)

突然不明白redis隊(duì)列和redis消息隊(duì)列的異同點(diǎn)?分別適用于什么場景?
我之前有個(gè)場景使用到redis隊(duì)列,分享出來大伙看看用的對(duì)不對(duì),是這樣的:搶單功能,一個(gè)訂單只有一個(gè)名額,為了防止高并發(fā)的情況,我使用redis隊(duì)列,把搶單的用戶id放入隊(duì)列里面(使用lpush),最后我只取隊(duì)列的第一個(gè)元素(rpop),因?yàn)檎l搶的快就是誰的。不知道行不行得通?

以上三個(gè)疑惑,希望各位求教,謝謝

回答
編輯回答
小曖昧

BRPOP命令和RPOP命令相似,唯一的區(qū)別是當(dāng)列表中沒有元素時(shí)BRPOP命令會(huì)一直阻塞住連接,直到有新元素加入。
另外Redis本就是單線程的,一個(gè)訂單一個(gè)名額的話,你直接放個(gè)string不就行了,有這個(gè)key則取,無則返回不能下單了(Redis的操作本就是單線程)

2017年1月15日 06:54
編輯回答
執(zhí)念

消息隊(duì)列(RabbidMQ, ActiveMQ,Kafka)主要有兩種使用模式:生產(chǎn)者->消費(fèi)者,發(fā)布者->訂閱者
第一種方式是一對(duì)一,后者是一對(duì)多
消費(fèi)掉,隊(duì)例中數(shù)據(jù)便不再保存,所謂閱后即焚。消息隊(duì)列的存和取一般是不同的服務(wù),用于服務(wù)之間的異步操作,解耦同步操作。

Redis屬于NoSQL類型的緩存/存儲(chǔ),側(cè)重點(diǎn)在支持快速反復(fù)讀取。數(shù)據(jù)的產(chǎn)生和消費(fèi)可能是同一個(gè)服務(wù),也可以是多個(gè),如集群。

EDITED:

上面的回答與題主的問題沒有太大關(guān)系(沒有仔細(xì)看...), 請(qǐng)不要被誤導(dǎo).

2018年4月11日 00:57