Python操作redis例項小結【String、Hash、List、Set等】
本文例項總結了Python操作redis方法。分享給大家供大家參考,具體如下:
python連線方式可參考:https://www.jb51.net/article/161353.htm
這裡介紹詳細使用
1、String 操作
redis中的String在在記憶體中按照一個name對應一個value來儲存
set()
#在Redis中設定值,預設不存在則建立,存在則修改 r.set('name','zhangsan') '''引數: set(name,value,ex=None,px=None,nx=False,xx=False) ex,過期時間(秒) px,過期時間(毫秒) nx,如果設定為True,則只有name不存在時,當前set操作才執行,同setnx(name,value) xx,如果設定為True,則只有name存在時,當前set操作才執行''' setex(name,time) #設定過期時間(秒) psetex(name,time_ms,value) #設定過期時間(豪秒)
mset()
#批量設定值 r.mset(name1='zhangsan',name2='lisi') #或 r.mget({"name1":'zhangsan',"name2":'lisi'})
get(name)
獲取值
mget(keys,*args)
#批量獲取 print(r.mget("name1","name2")) #或 li=["name1","name2"] print(r.mget(li))
getset(name,value)
#設定新值,列印原值 print(r.getset("name1","wangwu")) #輸出:zhangsan print(r.get("name1")) #輸出:wangwu
getrange(key,start,end)
#根據位元組獲取子序列 r.set("name","zhangsan") print(r.getrange("name",3))#輸出:zhan
setrange(name,offset,value)
#修改字串內容,從指定字串索引開始向後替換,如果新值太長時,則向後新增 r.set("name","zhangsan") r.setrange("name",1,"z") print(r.get("name")) #輸出:zzangsan r.setrange("name",6,"zzzzzzz") print(r.get("name")) #輸出:zzangszzzzzzz
setbit(name,value)
#對二進位制表示位進行操作 ''' name:redis的name offset,位的索引(將值對應的ASCII碼變換成二進位制後再進行索引) value,值只能是 1 或 0 ''' str="345" r.set("name",str) for i in str: print(i,ord(i),bin(ord(i)))#輸出 值、ASCII碼中對應的值、對應值轉換的二進位制 ''' 輸出: 3 51 0b110011 4 52 0b110100 5 53 0b110101''' r.setbit("name",0)#把第7位改為0,也就是3對應的變成了0b110001 print(r.get("name"))#輸出:145
getbit(name,offset)
#獲取name對應值的二進位制中某位的值(0或1) r.set("name","3") # 對應的二進位制0b110011 print(r.getbit("name",5)) #輸出:0 print(r.getbit("name",6)) #輸出:1
bitcount(key,start=None,end=None)
#獲取對應二進位制中1的個數 r.set("name","345")#0b110011 0b110100 0b110101 print(r.bitcount("name",start=0,end=1)) #輸出:7 ''' key:Redis的name start:位元組起始位置 end:位元組結束位置'''
strlen(name)
#返回name對應值的位元組長度(一個漢字3個位元組) r.set("name","zhangsan") print(r.strlen("name")) #輸出:8
incr(self,name,amount=1)
#自增mount對應的值,當mount不存在時,則建立mount=amount,否則,則自增,amount為自增數(整數) print(r.incr("mount",amount=2))#輸出:2 print(r.incr("mount"))#輸出:3 print(r.incr("mount",amount=3))#輸出:6 print(r.incr("mount",amount=6))#輸出:12 print(r.get("mount")) #輸出:12
incrbyfloat(self,amount=1.0)
#類似 incr() 自增,amount為自增數(浮點數)
decr(self,amount=1)
#自減name對應的值,當name不存在時,則建立name=amount,否則,則自減,amount為自增數(整數)
append(name,value)
#在name對應的值後面追加內容 r.set("name","zhangsan") print(r.get("name")) #輸出:'zhangsan r.append("name","lisi") print(r.get("name")) #輸出:zhangsanlisi
2、Hash 操作
redis中的Hash 在記憶體中類似於一個name對應一個dic來儲存
hset(name,key,value)
#name對應的hash中設定一個鍵值對(不存在,則建立,否則,修改) r.hset("dic_name","a1","aa")
hget(name,key)
r.hset("dic_name","aa") #在name對應的hash中根據key獲取value print(r.hget("dic_name","a1"))#輸出:aa
hgetall(name)
#獲取name對應hash的所有鍵值 print(r.hgetall("dic_name"))
hmset(name,mapping)
#在name對應的hash中批量設定鍵值對,mapping:字典 dic={"a1":"aa","b1":"bb"} r.hmset("dic_name",dic) print(r.hget("dic_name","b1"))#輸出:bb
hmget(name,keys,*args)
# 在name對應的hash中獲取多個key的值 li=["a1","b1"] print(r.hmget("dic_name",li)) print(r.hmget("dic_name","b1"))
hlen(name)、hkeys(name)、hvals(name)
dic={"a1":"aa",dic) #hlen(name) 獲取hash中鍵值對的個數 print(r.hlen("dic_name")) #hkeys(name) 獲取hash中所有的key的值 print(r.hkeys("dic_name")) #hvals(name) 獲取hash中所有的value的值 print(r.hvals("dic_name"))
hexists(name,key)
#檢查name對應的hash是否存在當前傳入的key print(r.hexists("dic_name","a1"))#輸出:True
hdel(name,*keys)
#刪除指定name對應的key所在的鍵值對 r.hdel("dic_name","a1")
hincrby(name,amount=1)
#自增hash中key對應的值,不存在則建立key=amount(amount為整數) print(r.hincrby("demo","a",amount=2)) hincrbyfloat(name,amount=1.0)
#自增hash中key對應的值,不存在則建立key=amount(amount為浮點數)
hscan(name,cursor=0,match=None,count=None)
hscan_iter(name,count=None)
3、List 操作
redis中的List在在記憶體中按照一個name對應一個List來儲存
lpush(name,values)
# 在name對應的list中新增元素,每個新的元素都新增到列表的最左邊 r.lpush("list_name",2) r.lpush("list_name",3,4,5)#儲存在列表中的順序為5,4,3,2
rpush(name,values)
#同lpush,但每個新的元素都新增到列表的最右邊
lpushx(name,value)
#在name對應的list中新增元素,只有name已經存在時,值新增到列表的最左邊
rpushx(name,value)
#在name對應的list中新增元素,只有name已經存在時,值新增到列表的最右邊
llen(name)
# name對應的list元素的個數 print(r.llen("list_name"))
linsert(name,where,refvalue,value))
# 在name對應的列表的某一個值前或後插入一個新值 r.linsert("list_name","BEFORE","2","SS")#在列表內找到第一個元素2,在它前面插入SS '''引數: name: redis的name where: BEFORE(前)或AFTER(後) refvalue: 列表內的值 value: 要插入的資料'''
r.lset(name,index,value)
#對list中的某一個索引位置重新賦值 r.lset("list_name","bbb")
r.lrem(name,num)
#刪除name對應的list中的指定值 r.lrem("list_name","SS",num=0) ''' 引數: name: redis的name value: 要刪除的值 num: num=0 刪除列表中所有的指定值; num=2 從前到後,刪除2個; num=-2 從後向前,刪除2個'''
lpop(name)
#移除列表的左側第一個元素,返回值則是第一個元素 print(r.lpop("list_name"))
lindex(name,index)
#根據索引獲取列表內元素 print(r.lindex("list_name",1))
lrange(name,end)
#分片獲取元素 print(r.lrange("list_name",-1))
ltrim(name,end)
#移除列表內沒有在該索引之內的值 r.ltrim("list_name",2)
rpoplpush(src,dst)
# 從一個列表取出最右邊的元素,同時將其新增至另一個列表的最左邊 #src 要取資料的列表 #dst 要新增資料的列表
brpoplpush(src,dst,timeout=0)
#同rpoplpush,多了個timeout,timeout:取資料的列表沒元素後的阻塞時間,0為一直阻塞 r.brpoplpush("list_name","list_name1",timeout=0)
blpop(keys,timeout)
#將多個列表排列,按照從左到右去移除各個列表內的元素 r.lpush("list_name",5) r.lpush("list_name1",5) while True: print(r.blpop(["list_name","list_name1"],timeout=0)) print(r.lrange("list_name",-1),r.lrange("list_name1",-1)) '''keys: redis的name的集合 timeout: 超時時間,獲取完所有列表的元素之後,阻塞等待列表內有資料的時間(秒),0 表示永遠阻塞'''
r.brpop(keys,timeout)
#同blpop,將多個列表排列,按照從右像左去移除各個列表內的元素
4、Set 操作
Set集合就是不允許重複的列表
sadd(name,values)
#給name對應的集合中新增元素 r.sadd("set_name","aa") r.sadd("set_name","aa","bb")
smembers(name)
#獲取name對應的集合的所有成員
scard(name)
#獲取name對應的集合中的元素個數 r.scard("set_name")
sdiff(keys,*args)
#在第一個name對應的集合中且不在其他name對應的集合的元素集合 r.sadd("set_name","bb") r.sadd("set_name1","bb","cc") r.sadd("set_name2","cc","dd") print(r.sdiff("set_name","set_name1","set_name2"))#輸出:{aa}
sdiffstore(dest,*args)
#相當於把sdiff獲取的值加入到dest對應的集合中
sinter(keys,*args)
# 獲取多個name對應集合的並集 r.sadd("set_name","dd") print(r.sinter("set_name","set_name2"))#輸出:{bb}
sinterstore(dest,*args)
#獲取多個name對應集合的並集,再講其加入到dest對應的集合中
sismember(name,value)
#檢查value是否是name對應的集合內的元素
smove(src,value)
#將某個元素從一個集合中移動到另外一個集合
spop(name)
#從集合的右側移除一個元素,並將其返回
srandmember(name,numbers)
# 從name對應的集合中隨機獲取numbers個元素 print(r.srandmember("set_name2",2))
srem(name,values)
#刪除name對應的集合中的某些值 print(r.srem("set_name2","dd"))
sunion(keys,*args)
#獲取多個name對應的集合的並集 r.sunion("set_name","set_name2")
sunionstore(dest,*args)
#獲取多個name對應的集合的並集,並將結果儲存到dest對應的集合中
有序集合:
在集合的基礎上,為每元素排序,元素的排序需要根據另外一個值來進行比較,所以,對於有序集合,每一個元素有兩個值,即:值和分數,分數專門用來做排序。
zadd(name,*args,**kwargs)
# 在name對應的有序集合中新增元素 r.zadd("zset_name","a2",2,"a3",5) #或 r.zadd('zset_name1',b1=10,b2=5)
zcard(name)
#獲取有序集合內元素的數量
zcount(name,min,max)
#獲取有序集合中分數在[min,max]之間的個數 print(r.zcount("zset_name",5))
zincrby(name,amount)
#自增有序集合內value對應的分數 r.zincrby("zset_name",amount=2)#自增zset_name對應的有序集合裡a1對應的分數
zrange( name,end,desc=False,withscores=False,score_cast_func=float)
# 按照索引範圍獲取name對應的有序集合的元素 aa=r.zrange("zset_name",withscores=True,score_cast_func=int) print(aa) '''引數: name redis的name start 有序集合索引起始位置 end 有序集合索引結束位置 desc 排序規則,預設按照分數從小到大排序 withscores 是否獲取元素的分數,預設只獲取元素的值 score_cast_func 對分數進行資料轉換的函式'''
zrevrange(name,score_cast_func=float)
#同zrange,集合是從大到小排序的
zrank(name,value)、zrevrank(name,value)
#獲取value值在name對應的有序集合中的排行位置(從0開始) print(r.zrank("zset_name","a2")) print(r.zrevrank("zset_name","a2"))#從大到小排序
zscore(name,value)
#獲取name對應有序集合中 value 對應的分數 print(r.zscore("zset_name","a1"))
zrem(name,values)
#刪除name對應的有序集合中值是values的成員 r.zrem("zset_name","a2")
zremrangebyrank(name,max)
#根據排行範圍刪除
zremrangebyscore(name,max)
#根據分數範圍刪除
zinterstore(dest,aggregate=None)
r.zadd("zset_name",5) r.zadd('zset_name1',a1=7,b2=5) # 獲取兩個有序集合的交集並放入dest集合,如果遇到相同值不同分數,則按照aggregate進行操作 # aggregate的值為: SUM MIN MAX r.zinterstore("zset_name2",("zset_name1","zset_name"),aggregate="MAX") print(r.zscan("zset_name2"))
zunionstore(dest,aggregate=None)
#獲取兩個有序集合的並集並放入dest集合,其他同zinterstore,
其他常用操作
delete(*names)
#根據name刪除redis中的任意資料型別
exists(name)
#檢測redis的name是否存在
keys(pattern='*')
#根據* ?等萬用字元匹配獲取redis的name
expire(name,time)
# 為某個name設定超時時間
rename(src,dst)
# 重新命名
move(name,db))
# 將redis的某個值移動到指定的db下
randomkey()
#隨機獲取一個redis的name(不刪除)
type(name)
# 獲取name對應值的型別
更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python常見資料庫操作技巧彙總》、《Python編碼操作技巧總結》、《Python資料結構與演算法教程》、《Python Socket程式設計技巧總結》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》
希望本文所述對大家Python程式設計有所幫助。