Redis資料類型之LIST類型,redis資料類型list
Web程式猿部落格:http://blog.csdn.net/thinkercode
list類型-特點
list 是一個鏈表結構,主要功能是 push、pop、擷取一個範圍的所有值等等,操作中 key理解為鏈表的名字。
Redis 的 list類型其實就是一個每個子項目都是 string 類型的雙向鏈表。鏈表的最大長度是(2的 32 次方)。我們可以通過 push,pop 操作從鏈表的頭部或者尾部添加刪除元素。這使得 list既可以用作棧,也可以用作隊列。
有意思的是 list 的 pop 操作還有阻塞版本的,當我們[lr]pop 一個 list 對象時,如果 list 是空,或者不存在,會立即返回 nil。但是阻塞版本的 b[lr]pop 可以則可以阻塞,當然可以加逾時時間,逾時後也會返回 nil。為什麼要阻塞版本的 pop 呢,主要是為了避免輪詢。舉個簡單的例子如果我們用 list 來實現一個工作隊列。 執行任務的 thread 可以調用阻塞版本的 pop 去擷取任務這樣就可以避免輪詢去檢查是否有任務存在。當任務來時候背景工作執行緒可以立即返回,也可以避免輪詢帶來的延遲。
list類型-應用情境
Redis list應用情境非常多,也是Redis最重要的資料結構之一,比如微博的關注列表,粉絲列表等都可以用Redis的list結構來實現;部落格實現中,可為每篇日誌設定一個list,在該list中推入進部落格評論;也可以使用Redis list實現訊息佇列。
list中的資料邏輯上存在循序關聯性(數組的下表),適合儲存帶有順序特性(空間、時間屬性)的資料。比如,記錄使用者在網站上瀏覽商品id,這種帶時間屬性的資料可以用來分析使用者的購物行為。
list作為queue,一端加入資料,另一端讀取資料,最典型的就是生產者/消費者模型,比如:商品秒殺,從已經初始化隊列中pop出資料,直到隊列為空白。
list作為stack,只操作list的一端,資料先進後出。
list常見命令