答:一般使用 list 結構作為隊列,rpush 生產消息,lpop 消費消息。當 lpop 沒有
消息的時候,要適當 sleep 一會再重試。
如果對方追問可不可以不用 sleep 呢?
list 還有個指令叫 blpop,在沒有消息的時候,它會阻塞住直到消息到來。如果對
方追問能不能生產一次消費多次呢?使用 pub/sub 主題訂閱者模式,可以實現
1:N 的消息隊列。
如果對方追問 pub/sub 有什么缺點?
在消費者下線的情況下,生產的消息會丟失,得使用專業的消息隊列如 RabbitMQ
等。
如果對方追問 redis 如何實現延時隊列?
我估計現在你很想把面試官一棒打死如果你手上有一根棒球棍的話,怎么問的這
么詳細。但是你很克制,然后神態自若的回答道:使用 sortedset,拿時間戳作為
score,消息內容作為 key 調用 zadd 來生產消息,消費者用 zrangebyscore 指令
獲取 N 秒之前的數據輪詢進行處理。到這里,面試官暗地里已經對你豎起了大拇
指。但是他不知道的是此刻你卻豎起了中指,在椅子背后。