使用Redis做過異步隊列嗎,是如何實現的?

Redis設計用來做緩存的,但是由於它自身的某種特性使得它可以用來做消息隊列。

它有幾個阻塞式的API可以使用,正是這些阻塞式的API讓其有能力做消息隊列;
另外,做消息隊列的其他特性例如FIFO(先入先出)也很容易實現,只需要一個list對象從頭取數據,從尾部塞數據即可;
Redis能做消息隊列還得益於其list對象blpop brpop接口以及Pub/Sub(發佈/訂閱)的某些接口,它們都是阻塞版的,所以可以用來做消息隊列。(List : lpush / rpop)

方式一:生產者消費者模式
使用list結構作爲隊列,rpush生產消息,lpop消費消息,當lpop沒有消息的時候,要適當sleep一會再重試。
或者,不用sleep,直接用blpop指令,在沒有消息的時候,它會阻塞住直到消息到來。

方式二:發佈訂閱者模式
使用pub/sub主題訂閱者模式,可以實現1:N的消息隊列。

缺點:在消費者下線的情況下,生產的消息會丟失。此場景,建議用MQ。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章