Redis 列表(list)是簡單的字串列表,依照插入順序排序。你可以加上一個元素到清單的頭部(左邊)或尾部(右邊),一個清單最多可以包含 232 - 1 個元素 (4294967295, 每個清單超過40億個元素)。 (建議:《redis影片教學》)
#list
## 常用指令:
lpush,rpush,lpop,rpop,lrange,BLPOP(阻塞版)等。應用程式場景:
Redis list的應用程式場景非常多,也是Redis最重要的資料結構之一。 我們可以輕鬆實現最新訊息排行等功能。 Lists的另一個應用程式是訊息佇列,可以利用Lists的PUSH操作,將任務存在Lists中,然後工作執行緒再用POP操作將任務取出執行。實作方式:
Redis list的實作為一個雙向鍊錶,即可以支援反向查找和遍歷,更方便操作,不過帶來了部分額外的記憶體開銷,Redis內部的許多實現,包括發送緩衝佇列等也都是用的這個資料結構。 RPOPLPUSH source destination 指令RPOPLPUSH 在一個原子時間內,執行下列兩個動作:## 將清單中的最後一個元素(尾元素)彈出,並返回給客戶端。
將 source 彈出的元素插入到清單 destination ,作為 destination 清單的的頭元素。
如果 source 和 destination 相同,則清單中的表尾元素被移到表頭,並傳回該元素,可以將這種特殊情況視為清單的旋轉(rotation)作業。
一個典型的例子是伺服器的監控程式:它們需要在盡可能短的時間內,並行地檢查一組網站,確保它們的可訪問性。
redis.lpush "downstream_ips", "192.168.0.10" redis.lpush "downstream_ips", "192.168.0.11" redis.lpush "downstream_ips", "192.168.0.12" redis.lpush "downstream_ips", "192.168.0.13" Then: next_ip = redis.rpoplpush "downstream_ips", "downstream_ips"
BLPOP
#
假設現在有job 、 command 和request 三個列表,其中job 不存在, command 和request 都持有非空列表。考慮以下命令:
BLPOP job command request 30 #阻塞30秒,0的話就是無限期阻塞,job列表為空,被跳過,緊接著command 列表的第一個元素被彈出。
1) "command" # 彈出元素所屬的清單 #o##up c屬的值
為什麼要阻塞版本的pop呢,主要是為了避免輪詢。舉個簡單的例子如果我們用list來實作一個工作佇列。執行任務的thread可以呼叫阻塞版本的pop去取得任務這樣就可以避免輪詢檢查是否有任務存在。當任務來時候工作執行緒可以立即返回,也可以避免輪詢帶來的延遲。
以上是redis什麼時候用list的詳細內容。更多資訊請關注PHP中文網其他相關文章!