摘要:上一篇文章實戰第三章命令第一節字符串下一篇文章實戰第三章命令第三節集合在之前我們介紹過,的列表允許用戶從序列的兩端推入或者彈出元素獲取列表元素以及執行各種常見的列表操作。
上一篇文章: Python--Redis實戰:第三章:Redis命令:第一節:字符串
下一篇文章:Python--Redis實戰:第三章:Redis命令:第三節:集合
在之前我們介紹過,Redis的列表允許用戶從序列的兩端推入或者彈出元素、獲取列表元素、以及執行各種常見的列表操作。除此之外,列表還可以用來存儲任務信息、最近瀏覽過的文章、常用聯系人信息。
本節將對列表這個由多個字符串組成的有序序列結構進行介紹,并展示一些最常用的列表處理命令。
下表展示了常用的列表命令:
命令 | 用例 | 用例描述 |
---|---|---|
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的元素也會被保留。 |
之前已經對列表的幾個推入和彈出操作進行了簡單的介紹,所以我們應該不會對上面的命令陌生。
列表推入、彈出操作實例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))
運行結果:
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的集合也提供了與列表類似的特性,但集合中能保存各不相同的元素。接下來的一節中就讓我媽來看看不能保存相同元素的集合都能做些什么?
上一篇文章: Python--Redis實戰:第三章:Redis命令:第一節:字符串
下一篇文章:Python--Redis實戰:第三章:Redis命令:第三節:集合
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42582.html
摘要:上一篇文章實戰第一章初識第一節簡介下一篇文章實戰第一章初識第三節你好文章投票試煉可以存儲鍵與種不同的數據結構類型之間的映射,這中數據結構類別分別是字符串列表集合散列和有序集合。 上一篇文章:Python--Redis實戰:第一章:初識Redis:第一節:Redis簡介下一篇文章:Python--Redis實戰:第一章:初識Redis:第三節:你好Redis-文章投票試煉 Redis可...
摘要:上一篇文章實戰第三章命令第二節列表下一篇文章實戰第三章命令第四節散列 上一篇文章:Python--Redis實戰:第三章:Redis命令:第二節:列表下一篇文章:Python--Redis實戰:第三章:Redis命令:第四節:散列 Redis的集合以無序的方式來存儲多個各不相同的元素,用戶可以快速地對集合執行添加元素操作、移除元素操作、以及檢查一個元素是否存在于集合里。本節將對最常用...
閱讀 2508·2023-04-25 19:31
閱讀 2244·2021-11-04 16:11
閱讀 2811·2021-10-08 10:05
閱讀 1520·2021-09-30 09:48
閱讀 2319·2019-08-30 15:56
閱讀 2414·2019-08-30 15:56
閱讀 2177·2019-08-30 15:53
閱讀 2272·2019-08-30 15:44