1. 程式人生 > >redis訊息佇列的處理邏輯

redis訊息佇列的處理邏輯

redis 作佇列使用時,假設需要完成以下邏輯:

1.一端入,令一端出。 2.每一次讀取佇列內容長度10。 3. 讀取完之後從移除讀取過的內容。

先說結論:

官方客戶端命令的順序應該是: 1.rpush test 1 2 3 4 5 6 7 8 9 10 11 12 // 壓入test佇列1-12 個數字 2.lrange test 0 9 // 獲取佇列的係數0-9,即1到10 十個數字,但是並沒有移除! 3.ltrim test 10 -1 // 擷取佇列,從第10個開始到最後一個保留,其它的移除 以上,完成了redis訊息佇列的基本邏輯

疑問1: 為什麼不直接lrange test 0 -1 獲取全部佇列,讀完後 del test

假設先獲取了全部佇列,在刪除該佇列以前,如果同時有新的訊息入列了,此訊息將丟失,因為發生在獲取全部佇列以後,又隨著刪除而刪除。

疑問2: 為什麼不用lpush,而用rpush

一個佇列,只有做到一端寫入,一端讀出,才能安全,如果在一端同時寫讀,那麼在讀後如果有新的訊息入列了,執行擷取時會把入列的訊息移除.

疑問3: 執行lrange和itrim的係數如果遠遠大於length,會拋錯嗎?

不會,可以寫lrange test 1000,-1和itrim 1000,-1,前者超容時,拿到長度為0的空[],後者保留空[]