首頁 >資料庫 >Redis >redis什麼時候用list

redis什麼時候用list

藏色散人
藏色散人原創
2019-06-11 09:50:014263瀏覽

Redis 列表(list)是簡單的字串列表,依照插入順序排序。你可以加上一個元素到清單的頭部(左邊)或尾部(右邊),一個清單最多可以包含 232 - 1 個元素 (4294967295, 每個清單超過40億個元素)。 (建議:《redis影片教學》)

redis什麼時候用list

#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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn