上一篇文章: Python--Redis實戰:第三章:Redis命令:第一節:字符串
下一篇文章: Python--Redis實戰:第三章:Redis命令:第三節:集合
在以前咱們介紹過,Redis的列表容許用戶從序列的兩端推入或者彈出元素、獲取列表元素、以及執行各類常見的列表操做。除此以外,列表還能夠用來存儲任務信息、最近瀏覽過的文章、經常使用聯繫人信息。redis
本節將對列表這個由多個字符串組成的有序序列結構進行介紹,並展現一些最經常使用的列表處理命令。segmentfault
下表展現了經常使用的列表命令:spa
命令 | 用例 | 用例描述 |
---|---|---|
rpush | rpush key-name value [value ...] | 將一個或多個值推入列表的右端 |
lpush | lpush key-namr value [value ...] | 將一個或多個值推入列表的左端 |
rpop | rpop key-name | 移除並返回列表最右端的元素 |
lpop | lpop key-name | 移除並返回列表最左端的元素 |
lindex | lindex key-name offset | 返回列表中偏移量爲offset的元素 |
lrange | lrange key-name start end | 返回列表從start偏移量到end偏移量範圍內的全部元素,其中偏移量爲start和偏移量爲end的元素也會包含在被返回的元素以內。 |
ltrim | ltrim key-name start end | 對列表進行修剪,只保留從strat偏移量到end偏移量範圍內的元素,其中偏移量爲start何偏移量爲end的元素也會被保留。 |
以前已經對列表的幾個推入和彈出操做進行了簡單的介紹,因此咱們應該不會對上面的命令陌生。code
import redis #導入redis包包 #與本地redis進行連接,地址爲:localhost,端口號爲6379 r=redis.StrictRedis(host='localhost',port=6379) r.delete('list-key') #推入操做完成以後會返回列表當前的長度 #從語義上來講,列表的左端爲開頭,右端爲結尾 print(r.rpush('list-key','last')) print(r.lpush('list-key','first')) print(r.rpush('list-key','new last')) print(r.lrange('list-key',0,-1)) #經過重複的彈出列表左端的元素,能夠按照從左到右的順序來獲取列表中的元素 print(r.lpop('list-key')) print(r.lpop('list-key')) print(r.lrange('list-key',0,-1)) #能夠同時推入多個元素 print(r.lpush('list-key','a','b','c')) print(r.lrange('list-key',0,-1)) #能夠從列表的左端、右端或者左右兩端刪減任意數量的元素 print(r.ltrim('list-key',2,-1)) print(r.lrange('list-key',0,-1))
運行結果:blog
1 2 3 [b'first', b'last', b'new last'] b'first' b'last' [b'new last'] 4 [b'c', b'b', b'a', b'new last'] True [b'a', b'new last']
這個實例裏面第一次使用到了ltrim命令,聚合使用ltrim和lrange能夠構建出一個在功能上相似於lpop或rpop,可是卻可以一次返回並彈出多個元素的操做。本章稍後將會介紹【原子地】執行多個命令的方法,而更高級的Redis事務特性則會在下一章介紹。隊列
在Redis裏面,多個命令原子地執行指的是:在這些命令正在讀取或者修改數據的時候,其餘客戶端不能讀取或者修改相同的數據。
有幾個列表命令能夠將元素從一個列表移動到另外一個列表,或者阻塞【block】執行命令的客戶端直到有其餘客戶端給列表添加元素爲止,這些命令以前都沒有介紹過,下表列出了這些阻塞彈出命令和元素移動命令:圖片
命令 | 用例 | 用例描述 |
---|---|---|
blpop | blpop key-name [key-name ...] timeout | 從第一個非空列表中彈出位於最左端的元素,或者在timeout秒以內阻塞並等待可彈出的元素出現。 |
brpop | brpop key-name [key-name ...] timeout | 從第一個非空列表中彈出位於最右端的元素,或者在timeout秒以內阻塞並等待可彈出的元素出現。 |
rpoplpush | rpoplpush source-key dest-key | 從source-key列表中彈出位於最右端的元素,而後將這個元素推入dest-key列表的最左端,並向用戶返回這個元素。 |
brpoplpush | brpoplpush source-key dest-key timeout | 從source-key列表中彈出位於最右端的元素,而後將這個元素推入dest-key列表的最左端,並向用戶返回這個元素;若是source-key爲空,那麼在timeout秒以內阻塞並等待可彈出的元素出現。 |
import redis #導入redis包包 #與本地redis進行連接,地址爲:localhost,端口號爲6379 r=redis.StrictRedis(host='localhost',port=6379) r.delete('list-key1') r.delete('list-key2') #將一些元素添加到兩個列表裏面 print(r.rpush('list-key1','item1')) print(r.rpush('list-key1','item2')) print(r.rpush('list-key2','item3')) #將一個元素從一個列表移動到另外一個列表,並返回被移動的元素 print(r.brpoplpush('list-key2','list-key1',1)) #當列表不包含任何元素時,阻塞彈出操做會在給定的期限內等待可彈出的元素出現,並在時限到達後返回None print(r.brpoplpush('list-key2','list-key1',1)) print(r.lrange('list-key1',0,-1)) print(r.lrange('list-key2',0,-1)) #blpop命令會從左到右地檢查傳入到列表,並對最早遇到的非空列表執行彈出操做 print(r.blpop(['list-key1','list-key2'],1)) print(r.blpop(['list-key1','list-key2'],1)) print(r.blpop(['list-key1','list-key2'],1))
運行結果:事務
對於阻塞彈出命令和彈出並推入命令,最多見的用例就是消息傳遞【messaging】和任務隊列【task queue】,這將在後面講解。字符串
列表的一個主要優勢在於它能夠包含多個字符串值,這使得用戶能夠將數據集中在同一個地方。Redis的集合也提供了與列表相似的特性,但集合中能保存各不相同的元素。接下來的一節中就讓我媽來看看不能保存相同元素的集合都能作些什麼?get
上一篇文章: Python--Redis實戰:第三章:Redis命令:第一節:字符串
下一篇文章: Python--Redis實戰:第三章:Redis命令:第三節:集合