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。
Redis實現非同步佇列
可以考慮利用list結構進棧出棧實現,那麼基本上你會需要以下步驟 description configonlinemodel author elegant date 2019 11 29 data public class configonlinemodel implements serializa...
使用過Redis做非同步佇列麼,你是怎麼用的?
一般使用list結構作為佇列,rpush生產訊息,lpop消費訊息。當lpop沒有訊息的時候,要適當sleep一會再重試。如果對方追問可不可以不用sleep呢?list還有個指令叫blpop,在沒有訊息的時候,它會阻塞住直到訊息到來。如果對方追問能不能生產一次消費多次呢?使用pub sub主題訂閱者...
使用過 Redis 做非同步佇列麼,你是怎麼用的?
一般使用 list 結構作為佇列,rpush 生產訊息,lpop 消費訊息。當 lpop 沒有 訊息的時候,要適當 sleep 一會再重試。如果對方追問可不可以不用 sleep 呢?list 還有個指令叫 blpop,在沒有訊息的時候,它會阻塞住直到訊息到來。如果對 方追問能不能生產一次消費多次呢?...