1. 程式人生 > >python3 操作 redis List(列表) 例項 詳解

python3 操作 redis List(列表) 例項 詳解

沒有安裝redis的話可以看我另一篇blog,有資源和方法

首先先看一下python3 操作redis都有哪些命令

  1. lrange(key , start , stop)
  2. lpush(key , value)
  3. rpush(key , value)
  4. lpop(key)
  5. rpop(key)
  6. blpop(key)
  7. brpop(key)
  8. brpoplpush(source,destination,timeout)
  9. lindex(key,index)
  10. linsert(key,before|after,privot,value)
  11. llen(key)
  12. lpushx(key)
  13. lrem(key , value , count)
  14. lset(key , index , value)
  15. ltrim(key , start , stop)
  16. rpoplpush(source , destination)
  17. rpushx(key , value)

下面是具體例子詳解和程式碼:

①lrange(key , start , stop)
返回列表 key 中指定區間內的元素,區間以偏移量 start 和 stop 指定。
下標(index)引數 start 和 stop 都以 0 為底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。

import redis
r = redis.Redis(host='localhost'
, port='6379' , db=6 ,decode_responses=True) r.lpush("0",1,2,3,4) print(r.lrange("0" , 0 , -1))

②lpush(key , value)
將一個或多個值 value 插入到列表 key 的表頭
如果有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表頭
如果 key 不存在,一個空列表會被建立並執行 LPUSH 操作
當 key 存在但不是列表型別時,返回一個錯誤

import redis
r = redis.Redis(host='localhost' , port='6379'
, db=6 ,decode_responses=True) r.lpush("1",1) print(r.lrange("1" , 0 , -1)) #列印列表"1"的全部內容 r.lpush("1",1,2,3,4) print(r.lrange("1" , 0 , -1))

③rpush(key , value)
將一個或多個值 value 插入到列表 key 的表尾(最右邊)。
如果有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表尾
如果 key 不存在,一個空列表會被建立並執行 RPUSH 操作。
當 key 存在但不是列表型別時,返回一個錯誤。

import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("2",1) 
print(r.lrange("2" , 0 , -1)) #列印列表"2"的全部內容
r.rpush("2",1,2,3,4)
print(r.lrange("2" , 0 , -1))

④lpop(key)
移除並返回列表 key 的頭元素。

import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.lpush("3",1,2,3,4)
print(r.lrange("3" , 0 , -1)) #列印列表"3"的全部內容
r.lpop("3")
print(r.lrange("3" , 0 , -1))

⑤rpop(key)
移除並返回列表 key 的尾元素。

import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.lpush("4",1,2,3,4)
print(r.lrange("4" , 0 , -1)) #列印列表"4"的全部內容
r.rpop("4")
print(r.lrange("4" , 0 , -1))

⑥blpop(key)
Blpop 命令移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
如果列表為空,返回一個 None 。 否則,返回一個含有兩個元素的列表,第一個元素是被彈出元素所屬的 key ,第二個元素是被彈出元素的值。

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("6",1,2,3,4,4,5,6)
print(r.blpop("6"))
print(r.blpop("6"))
print(r.blpop("6"))
print(r.blpop("100" , timeout=2))#因為鍵 100 不存在,所以2秒後輸出的結果是None
print(r.lrange("6" , 0 , -1)) #列印列表"6"的全部內容

⑦brpop(key)
Brpop 命令移出並獲取列表的最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
假如在指定時間內沒有任何元素被彈出,則返回一個None 和等待時長。 反之,返回一個含有兩個元素的列表,第一個元素是被彈出元素所屬的 key ,第二個元素是被彈出元素的值。

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("7",1,2,3,4,5,6,)     
print(r.lrange("7" , 0 , -1)) #列印列表"7"的全部內容 
print(r.brpop("7"))     
print(r.brpop("7"))     
print(r.brpop("7"))      
print(r.brpop("101",timeout=2))      #因為鍵 101 不存在,所以2秒後輸出的結果是None
print(r.lrange("7" , 0 , -1)) #列印列表"7"的全部內容 

⑧brpoplpush(source,destination,timeout)
命令從列表中彈出一個值,將彈出的元素插入到另外一個列表中並返回它; 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
假如在指定時間內沒有任何元素被彈出,則返回一個 None 和等待時長。 反之,返回一個含有兩個元素的列表,第一個元素是被彈出元素的值,第二個元素是等待時長。

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("8",1,2,3)
r.rpush("88",4,5,6)
print(r.lrange("8" , 0 , -1)) #列印列表"8"的全部內容 
print(r.lrange("88" , 0 , -1)) #列印列表"88"的全部內容 
print(r.brpoplpush(src="8",dst="88",timeout=2))  #輸出的結果是3
print(r.brpoplpush(src="44",dst="22",timeout=2))  #鍵44 不存在,輸出的結果是None
print(r.lrange("8" , 0 , -1)) #列印列表"8"的全部內容 
print(r.lrange("88" , 0 , -1)) #列印列表"88"的全部內容 

⑨lindex(key,index)

通過索引獲取列表中的元素。你也可以使用負數下標,以 -1 表示列表的最後一個元素

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("9",1,2,3)
print(r.lrange("9" , 0 , -1)) #列印列表"8"的全部內容 
print(r.lindex("9",0))        #輸出的結果是1
print(r.lindex("9",1))        #輸出的結果是2
print(r.lindex("9",2))        #輸出的結果是3
print(r.lindex("9",3))        #輸出的結果是None
print(r.lindex("9",-1))        #輸出的結果是3
print(r.lrange("9" , 0 , -1)) #列印列表"8"的全部內容 

⑩linsert(key,before|after,privot,value)
用於在列表的元素前或者後插入元素。
當指定元素不存在於列表中時,不執行任何操作。 當列表不存在時,被視為空列表,不執行任何操作。

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("10",1,2,3)
print(r.lrange("10" , 0 , -1)) #列印列表"10"的全部內容 
r.linsert("10" , "BEFORE" , "2" , 10)
print(r.lrange("10" , 0 , -1)) #結果 ['1', '10', '2', '3']

r.rpush("100",1,2,3)
r.linsert("100" , "AFTER" , "2" , 10)
print(r.lrange("100" , 0 , -1)) #結果 ['1', '2', '10', '3']

①①llen(key)
返回列表的長度。 如果列表 key 不存在,則 key 被解釋為一個空列表,返回 0 。 如果 key 不是列表型別,返回一個錯誤。

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("11",1,2,3)
print(r.lrange("11" , 0 , -1)) #列印列表"11"的全部內容 
print(r.llen("11"))  #結果是 3

①②lpushx(key)
將一個或多個值插入到已存在的列表頭部,列表不存在時操作無效。
和lpush的區別是lpushx在列表不存在時操作無效,而lpush會建立一個列表

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("12" , 1,2,3)
r.rpush("122" , 1,2,3)
print(r.lrange("12" , 0 , -1)) #結果為 ['1', '2', '3']
print(r.lrange("122" , 0 , -1)) #結果為 ['1', '2', '3']
r.lpush("123" , 1)
r.lpushx("1223" , 1)
print(r.lrange("123" , 0 , -1)) #結果為 ['1']
print(r.lrange("1223" , 0 , -1)) #結果為 []

①③lrem(key , value , count)
根據引數 COUNT 的值,移除列表中與引數 VALUE 相等的元素。
COUNT 的值可以是以下幾種:
count > 0 : 從表頭開始向表尾搜尋,移除與 VALUE 相等的元素,數量為 COUNT 。
count < 0 : 從表尾開始向表頭搜尋,移除與 VALUE 相等的元素,數量為 COUNT 的絕對值。
count = 0 : 移除表中所有與 VALUE 相等的值。
返回被移除元素的數量。 列表不存在時返回 0 。

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("13" , 'a','b','b','c','d','b')
print(r.lrange("13" , 0 , -1)) #結果為['a', 'b', 'b', 'c', 'd', 'b']
r.lrem("13" , "b" , 2)
print(r.lrange("13" , 0 , -1)) #結果為['a', 'c', 'd', 'b']

r.rpush("133" , 'a','b','b','c','d','b')
print(r.lrange("133" , 0 , -1)) #結果為['a', 'b', 'b', 'c', 'd', 'b'] 
r.lrem("133" , "b" , -2)
print(r.lrange("133" , 0 , -1)) #結果為['a', 'b', 'c', 'd']

①④lset(key , index , value)
將列表 key 下標為 index 的元素的值設定為 value 。
當 index 引數超出範圍,或對一個空列表( key 不存在)進行 LSET 時,返回一個錯誤。

import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("14" , 1,2,3,4)
print(r.lrange("14" , 0 , -1)) #列印列表"14"的全部內容
r.lset("14",1,9)
print(r.lrange("14" , 0 , -1)) #結果為 ['1', '9', '3', '4']

①⑤ltrim(key , start , stop)
對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。
舉個例子,執行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三個元素,其餘元素全部刪除。
下標(index)引數 start 和 stop 都以 0 為底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。
你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。
當 key 不是列表型別時,返回一個錯誤。

import redis
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("15" , 1,2,3,4)
print(r.lrange("15" , 0 , -1)) #列印列表"14"的全部內容
r.ltrim("15",0,1)
print(r.lrange("15" , 0 , -1)) #結果為 ['1', '2']

①⑥rpoplpush(source , destination)
將列表 source 中的最後一個元素(尾元素)彈出,並返回給客戶端。
將 source 彈出的元素插入到列表 destination ,作為 destination 列表的的頭元素。

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
r.rpush("16",1,2,3)
r.rpush("166",4,5,6)
print(r.lrange("16" , 0 , -1)) # ['1', '2', '3'] 
print(r.lrange("166" , 0 , -1)) # ['4', '5', '6'] 
print(r.rpoplpush(src="16",dst="166"))  #輸出的結果是3
print(r.lrange("16" , 0 , -1)) # ['1', '2'] 
print(r.lrange("166" , 0 , -1)) # ['3', '4', '5', '6']

①⑦rpushx(key , value)
將值 value 插入到列表 key 的表尾,當且僅當 key 存在並且是一個列表。
和 RPUSH 命令相反,當 key 不存在時, RPUSHX 命令什麼也不做。

import redis 
r = redis.Redis(host='localhost' , port='6379' , db=6 ,decode_responses=True)
# for i in range(10):
#     r.lpop("17")
#     r.lpop("177")
#     r.lpop("1777")
r.rpush("17" , 1,2,3)
r.rpush("177" , 1,2,3)
print(r.lrange("17" , 0 , -1)) #結果為 ['1', '2', '3']
print(r.lrange("177" , 0 , -1)) #結果為 ['1', '2', '3']
r.rpush("177" , 4)
r.rpushx("1777" , 4)
print(r.lrange("177" , 0 , -1)) #結果為 ['1', '2', '3', '4']
print(r.lrange("1777" , 0 , -1)) #結果為 []

相關推薦

python3 操作 redis List(列表) 例項

沒有安裝redis的話可以看我另一篇blog,有資源和方法 首先先看一下python3 操作redis都有哪些命令 lrange(key , start , stop) lpush(key , value) rpush(key , value) lpop(

Linq連線兩個List列表 例項(Linq inner join,left join)

本章節主要介紹Linq的聯接運算,對兩個List< T >,分別 inner join 和 left join 聯接,以此為例,進行例項詳解,程式碼也是自己編寫,親測通過的,可以直接拿著當demo使用。 聯接是指將一個數據源物件與另一個數據源

UGUI製作無限迴圈List列表過程

UI開發其實技術的成分相對來說不算多,但是一個好的UI是絕對少不了底層元件的支援的。我個人認為UI元件中相對比較複雜的就是List了,所以,這兩天實現了一個UGUI的list,寫了好幾個版本,最終這個版本是相對比較好用的,在這我介紹一下大概思路,一是鞏固一下知識做個記錄,

php mysql PDO 查詢操作例項

php mysql PDO 查詢操作的例項詳解 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <?php $dbh = new PDO(

MongoDB 關於索引操作命令例項

索引是提高查詢查詢效率最有效的手段。索引是一種特殊的資料結構,索引以易於遍歷的形式儲存了資料的部分內容(如:一個特定的欄位或一組欄位值),索引會按一定規則對儲存值進行排序,而且索引的儲存位置在記憶體中,所在從索引中檢索資料會非常快。如果沒有索引,MongoDB必

redis 操作List列表操作

redis list操作 reids:{ k1:'dafdadfasf', l1:[1,2,3,4] } redis 操作之List列表操作 List操作,redis中的List在在記憶體中按照一個name對應一個List來儲存。如圖: lpush(name,values),新增值

PHP檔案上傳操作例項(包含上傳檔案型別MIME驗證)

本文例項分析了PHP檔案上傳操作。分享給大家供大家參考,具體如下: 檔案上傳 發生在瀏覽器向伺服器發出的請求中。 檔案,對於瀏覽器來講,就是表單中的一個特殊型別的資料而已。 瀏覽器表單中的資料,兩種型別: 字串型別(位元組流編碼) 檔案型別(二進位制編碼),檔案是表單資料中

linux下redis與phpredis安裝與簡單操作

首先下載redis安裝包 [[email protected] ~]#wget http://download.redis.io/releases/redis-3.0.2.tar.gz [[email protected] ~]# tar xzf re

java中List的用法和例項

的用法List包括List介面以及List介面的所有實現類。因為List介面實現了Collection介面,所以List介面擁有Collection介面提供的所有常用方法,又因為List是列表型別,所以List介面還提供了一些適合於自身的常用方法,如表1所示。表1 List介面定義的常用方法及功能從表1可以看

PHP增刪改查操作例項

<?php[email protected]_connect("localhost","root","123456");if(!$linkID){echo "沒連線上";}[email protected]_select_db("bean");if(!$ss){   echo "沒找

pv操作及訊號量實用例項

學習PV操作之前,我們首先來了解兩個很基礎的概念: 同步、互斥: 同步:其實說同步還不如說”協作“,就是我們的目標只有一個,我們奔著同一個目標去的,都是在大家的努力下共同完成這麼一件事情。還是比較容易理解的吧。不見得太難。 互斥:借用別人的一句話“千軍萬馬過獨木橋”,很通俗

Redis學習】:list資料型別

list資料結構 在redis中,list資料結構是按照插入順序的字串連結串列,和資料結構中的普通連結串列一樣,我們可以在其頭部(left)和尾部(right)新增新的元素。在插入時,如果該鍵並不

redis info 參數

-1 事件處理 架構 單位 不同 cpu malloc client xxx redis info 參數 詳解 info 以一種易於解釋且易於閱讀的格式,返回關於redis服務器的各種信息和統計數值 命令如下:(默認不需要all , 我習慣加 all ,你可以去掉all

Redis配置文件

客戶端連接 data val 行數 read 內存 虛擬內存 master led 1 daemonize yes #是否以後臺進程運行,默認為no 2 pidfile /var/run/redis.pid #如以後臺進程運行,則需指定一個pid,默認為/var

CSS 列表樣式

.com htm 天龍八部 分享 .cn font -s com str CSS列表用於前端的列表排列。 CSS列表屬性作用如下: 設置不同的列表項標記為有序列表 設置不同的列表項標記為無序列表 設置列表項標記為圖像 列表 在HTML中,有兩種類型的列表: 無序列表

redis配置文件及實現主從同步切換

redis redis主從 redis配置文件詳解及實現主從同步切換redis復制Redis復制很簡單易用,它通過配置允許slave Redis Servers或者Master Servers的復制品。接下來有幾個關於redis復制的非常重要特性:一個Master可以有多個Slaves。Slaves能

python操作word、ppt的

網上 功能 auto sed rep 不知道 win32 form display                             python使用win32com的心得 python可以使用一個第三方庫叫做win32com達到操作com的目的, 我是安裝了Ac

Python List insert()方法

返回 -- 定位 abs pre insert 詳解 頭部 表示 1.功能insert()函數用於將指定對象插入列表的指定位置。 2.語法list.insert(index, obj) 3.參數index: 對象obj需要插入的索引位置。obj: 插入列表中的對象。

操作系統中的目錄

系列 mkdir 保存 linu ges 分隔 組成 查找 而在 首先要搞清楚一些基本的問題 1.文件就是一些數據的集合,計算機的信息都是通過 文件來保存 2.windows下的文件夾與linux下的目錄是同一個東西 3.目錄是一種文件,一種特殊的文件,有時候也被

lamp+redis集群配置

ID 停止 target enable 關閉selinux targe 火墻 官網 not 一,配置防火墻,開啟80、3306端口 #停止firewall服務 systemctl stop firewalld.service #禁止firewall開機啟動 system