使用過 Redis 做非同步佇列麼,你是怎麼用的?

2022-10-11 14:24:11 字數 619 閱讀 2599

一般使用 list 結構作為佇列,rpush 生產訊息,lpop 消費訊息。當 lpop 沒有

訊息的時候,要適當 sleep 一會再重試。

如果對方追問可不可以不用 sleep 呢?

list 還有個指令叫 blpop,在沒有訊息的時候,它會阻塞住直到訊息到來。如果對

方追問能不能生產一次消費多次呢?使用 pub/sub 主題訂閱者模式,可以實現

1:n 的訊息佇列。

如果對方追問 pub/sub 有什麼缺點?

在消費者下線的情況下,生產的訊息會丟失,得使用專業的訊息佇列如 rabbitmq

等。如果對方追問 redis 如何實現延時佇列?

我估計現在你很想把面試官一棒打死如果你手上有一根棒球棍的話,怎麼問的這

麼詳細。但是你很克制,然後神態自若的回答道:使用 sortedset,拿時間戳作為

score,訊息內容作為 key 呼叫 zadd 來生產訊息,消費者用 zrangebyscore 指令

獲取 n 秒之前的資料輪詢進行處理。到這裡,面試官暗地裡已經對你豎起了大拇

指。但是他不知道的是此刻你卻豎起了中指,在椅子背後。

使用過Redis做非同步佇列麼,你是怎麼用的?

一般使用list結構作為佇列,rpush生產訊息,lpop消費訊息。當lpop沒有訊息的時候,要適當sleep一會再重試。如果對方追問可不可以不用sleep呢?list還有個指令叫blpop,在沒有訊息的時候,它會阻塞住直到訊息到來。如果對方追問能不能生產一次消費多次呢?使用pub sub主題訂閱者...

Redis實現非同步佇列

可以考慮利用list結構進棧出棧實現,那麼基本上你會需要以下步驟 description configonlinemodel author elegant date 2019 11 29 data public class configonlinemodel implements serializa...

使用Redis做過非同步佇列嗎,是如何實現的?

redis設計用來做快取的,但是由於它自身的某種特性使得它可以用來做訊息佇列。它有幾個阻塞式的api可以使用,正是這些阻塞式的api讓其有能力做訊息佇列 另外,做訊息佇列的其他特性例如fifo 先入先出 也很容易實現,只需要乙個list物件從頭取資料,從尾部塞資料即可 redis能做訊息佇列還得益於...