【進行中】Redis命令參考(Commands Reference)中文翻譯【List部分】

注意:此文檔已經過期,請移步到 http://huangz.iteye.com/blog/1123512 查看最新翻譯。

 

BLPOP key [key ...] timeout

    BLPOP是一個阻塞列表的彈出原語。
    它是LPOP的阻塞版本,當給定列表內沒有任何元素可供彈出的時候,連接將被BLPOP命令阻塞。
    當給定多個key參數時,按傳入key的先後檢查列表,彈出第一個非空列表的頭部元素。

        複雜度:
            O(1)

        返回值:
            假如在指定時間內沒有任何元素被彈出,則返回一個nil和等待時長。
            反之,返回一個含有兩個元素的列表,第一個是被彈出元素所屬的key,第二個是被彈出元素的值。

    非阻塞行爲

    當BLPOP被調用時,如果給定key內至少有一個非空列表,那麼彈出遇到的第一個非空列表的頭部元素,並和被彈出元素所屬的列表的名字一起,組成結果>返回給調用者。

    (多個)給定key按被傳入的先後順序被檢查。
    假設現在job不存在,command和request都持有非空列表。考慮以下命令:

    BLPOP job command request

    BLPOP保證返回的元素來自command,因爲它是第一個按“查找job -> 查找command -> 查找request”這樣的順序,第一個找到的非空列表。

 

redis> DEL job command request  # 確保key都被刪除
(integer) 0
redis> LPUSH command "update system..."  # 爲command列表增加一個值
(integer) 1
redis> LPUSH request "visit page"  # 爲request列表增加一個值
(integer) 1

redis> BLPOP job command request 0  # job列表爲空,被跳過,緊接着command列表的第一個元素被彈出。
1) "command"
2) "update system..."

 

    阻塞行爲

    如果所有給定key都不存在或包含空列表,那麼BLPOP將阻塞連接,直到另一個客戶端對給定key的其中一個列表執行LPUSH或RPUSH操作,或操作超時爲止。

    如果在規定時間內新數據出現在其中一個key列表內,或者等待超時,都會導致返回。

    超時參數接受一個數字作爲值。超時參數設爲0表示阻塞時間可以無限期延長(block indefinitely) 。

    相同的key被多個客戶端同時阻塞

    相同的key可以被多個客戶端同時阻塞。不同的客戶端被放到一個隊列中,按“先阻塞先服務”的順序同key進行BLPOP操作。

 

redis> EXISTS job  # 確保兩個key都不存在
(integer) 0
redis> EXISTS command
(integer) 0
redis> BLPOP job command 300  #因爲key一開始不存在,所以操作會被阻塞,直到另一客戶端對job或者command列表進行PUSH操作。
1) "job"  # 這裏被push的是job
2) "do my home work"  # 被彈出的內容
(26.26s)  # 等待的秒數


redis> BLPOP job command 5  # 等待超時的情況
(nil)
(5.66s)

 

    在MULTI/EXEC事務中的BLPOP

    BLPOP可以用於流水線(批量地發送多個命令並閱讀多個回覆),但它不能用在MULTI/EXEC塊當中。這要求整個服務器按順序被阻塞以保證塊執行時的原子
性,該行爲阻止了其他客戶端執行push操作。

    一個被包含在MULTI/EXEC命令內的BLPOP操作,行爲表現得就像操作超時一樣,僅僅返回一個nil值。如果你是科幻迷,你可以想象MULTI/EXEC命令內時間>以無限的速度在流逝。

 

redis> MULTI
OK
redis> BLPOP job 30
QUEUED
redis> EXEC
1) (nil)  # 操作沒有等待,立即被返回了
 

 

LLEN key

    返回key所儲存列表的長度。
    如果key不存在,則key被解釋爲一個空列表,返回0.
    如果key儲存的不是列表,返回一個錯誤。

        複雜度:
            O(1)

        返回值:
            key中列表的長度。

redis> LLEN job  # 空列表
(integer) 0

redis> LPUSH job "cook food"
(integer) 1
redis> LPUSH job "have lunch"
(integer) 2

redis> LLEN job
(integer) 2
 


LREM key count value

    按照count參數的要求,移除列表中與value參數相等的值。
   
    count參數可以是以下幾種:
        count > 0 : 從表頭開始向表尾搜索,移除與value參數相等的值。
        count < 0 : 從表尾開始向表頭搜索,移除與value參數相等的值。
        count = 0 : 移除表中所有與value相等的值。

        複雜度:
            O(N),N爲列表的長度。

        返回值:
            被移除值的數量。

 

# 先創建一個表,內容排列是
# morning hello morning helllo morning

redis> LPUSH greet "morning"
(integer) 1
redis> LPUSH greet "hello"
(integer) 2
redis> LPUSH greet "morning"
(integer) 3
redis> LPUSH greet "hello"
(integer) 4
redis> LPUSH greet "morning"
(integer) 5
redis> LRANGE greet 0 4
1) "morning"
2) "hello"
3) "morning"
4) "hello"
5) "morning"

redis> LREM greet 2 morning  # 移除從表頭到表尾,最先發現的兩個morning
(integer) 2  # 兩個元素被移除

redis> LLEN greet 
(integer) 3

redis> LRANGE greet 0 2
1) "hello"
2) "hello"
3) "morning"

redis> LREM greet -1 morning  # 移除從表尾到表頭,第一個morning
(integer) 1

redis> LLEN greet
(integer) 2

redis> LRANGE greet 0 1
1) "hello"
2) "hello"

redis> LREM greet 0 hello  # 移除表中所有hello
(integer) 2  # 兩個hello被移除

redis> LLEN greet
(integer) 0

 


RPUSH key value

    將值插入到表尾。
    如果key不存在,一個空列表會被自動創建再執行RPUSH操作。
    當key存在當不是列表類型時,返回一個錯誤。

        複雜度:
            O(1)

        返回值:
            執行RPUSH操作後,表的長度。

 

redis> LLEN fp-language
(integer) 0
redis> RPUSH fp-language lisp
(integer) 1
redis> LRANGE fp-language 0 0 
1) "lisp"
redis> RPUSH fp-language scheme
(integer) 2
redis> LRANGE fp-language 0 1
1) "lisp"
2) "scheme"
 


BRPOP key [key ...] timeout


    RPOP操作的阻塞版本,作用和BLPOP相似,唯一不同是BRPOP彈出第一個非空列表的表尾元素,而BLPOP彈出第>一個非空列表的表頭元素。(具體參考BLPOP命令)。

        複雜度:
            O(1)

        返回值:
            假如在指定時間內沒有任何元素被彈出,則返回一個nil和等待時長。
            反之,返回一個含有兩個元素的列表,第一個是被彈出元素所屬的key,第二>個是被彈出元素的值。 

 

 

redis> LLEN course
(integer) 0

redis> RPUSH course algorithm001
(integer) 1
redis> RPUSH course c++101
(integer) 2

redis> BRPOP course 30
1) "course"
2) "c++101"

 

 

LPOP key

    移除並返回列表中第一個元素。

        複雜度:
            O(1)

        返回值:
            列表中第一個值。
            當key不存在時,返回nil。

 

redis> LLEN course
(integer) 0

redis> RPUSH course algorithm001
(integer) 1
redis> RPUSH course c++101
(integer) 2

redis> LPOP course
"algorithm001"
 


LSET key index value

    將列表中index下標的值設爲value。
    更多信息參考LINDEX操作。
    當index參數超出範圍時,返回一個錯誤。

        複雜度:
            O(N),N爲列表的長度。
            對頭元素和尾元素進行LSET操作,複雜度爲O(1)。

        返回值:
            操作成功返回ok,否則返回錯誤信息。

redis> LPUSH job "cook food"
(integer) 1

redis> LRANGE job 0 0
1) "cook food"

redis> LSET job 0 "play game"
OK

redis> LRANGE job  0 0
1) "play game"
 


RPUSHX key value

    將值value插入到表尾,當且僅當key存在並且是一個列表。     
    和RPUSH操作相反,當key不存在時,RPUSHX操作什麼也不做。
   
        複雜度:
            O(1)

        返回值:
            RPUSHX操作之後,表的長度。

redis> LLEN greet
(integer) 0
redis> RPUSHX greet "hello"  # 對不存在的key進行RPUSHX,PUSH失敗。
(integer) 0
redis> RPUSH greet "hi"  # 先用RPUSH插入一個元素
(integer) 1
redis> RPUSHX greet "hello"  # greet現在是一個列表類型,RPUSHX操作成功。
(integer) 2
 

 

 

 

 

######防止編輯器吃掉空白行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章