redis的訊息佇列(面試題)

2021-10-07 22:35:15 字數 653 閱讀 5541

介紹:redis的佇列 使用rpush/lpush操作入佇列,使用rpop/lpop出佇列。客戶端是通過列隊的pop來獲取訊息,然後進行處理,處理完再接著獲取訊息。如此迴圈。這就是客戶端的生命週期。

問題一:佇列空了會有什麼影響

如果佇列空了,客戶端會一直pop佇列,這就造成了空輪詢。空輪詢不但提高了客戶端的cpu,也加大了服務端的qps,是的redis的查詢效率變低。

處理方式

方式一:可以sleep,但是如果多個消費者就會對每個消費者進行sleep

方式二:通過blpop/brpop進行讀取。阻塞讀取。如果佇列沒有訊息會阻塞一直到有訊息就停止阻塞。幾乎沒有延時。

問題二:為什麼redis訊息佇列不能100%可靠?

因為沒有reids沒有ack機制。在傳送過程中訊息訊息是沒有訊息補償機制(redis訊息持久化是非同步的,理論上來說,發出去的訊息,都有可能丟失。傳統的mq在傳送的環節,都有機制確保訊息被持久化到硬碟,如果沒有持久化到硬碟,傳送方會報錯,從而進行補償)。

問題三:延時佇列怎麼實現的

延時佇列:可以通過zset資料結構來實現。將訊息序列化成乙個value,延時的事件作為score。通過score進行排序。多個執行緒輪詢到期的任務,多個執行緒是避免萬一單執行緒掛了,提高了可用性。但是要注意避免多個執行緒同時搶到,可以使用zrem的返回值來獲取任務。

訊息佇列面試題

1.訊息丟失,分為三種情況,分別在生產者,mq,消費者上發生 在springcloud中整合amqp,在配置檔案中開啟confirm訊息確認 spring.rabbitmq.publisher confirms true 生產者實現confirm介面 public class customconfi...

面試題 如何保證訊息佇列的高可用

如何保證訊息佇列的高可用?圍繞著mq進行面試,肯定會聊到高可用相關的話題,因為引入了mq中介軟體導致了系統的可用性降低。mq所帶來的一些坑,在實際專案中是如何解決的。如果回答只是單純的在mq,並沒有考慮過各種有可能出現的問題,那面試的印象分就會迅速降低。是讓你結合專案說一說在實際的生產環境中如何實現...

面試題集 redis

1.redis常用的五種資料型別 1.string 字串 string是簡單的 key value 鍵值對,value 不僅可以是 string,也可以是數字。它是redis最基本的資料型別,乙個redis中字串value最多可以是512m。2.hash 雜湊 redis hash 是乙個鍵值對集合...