日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python操作redis實(shí)例小結(jié)【String、Hash、List、Set等】

系統(tǒng) 2035 0

本文實(shí)例總結(jié)了Python操作redis方法。分享給大家供大家參考,具體如下:

python連接方式可參考:https://www.jb51.net/article/161353.htm

這里介紹詳細(xì)使用

1、String 操作

redis中的String在在內(nèi)存中按照一個(gè)name對(duì)應(yīng)一個(gè)value來(lái)存儲(chǔ)

set()

            
#在Redis中設(shè)置值,默認(rèn)不存在則創(chuàng)建,存在則修改
r.set('name', 'zhangsan')
'''參數(shù):
  set(name, value, ex=None, px=None, nx=False, xx=False)
  ex,過(guò)期時(shí)間(秒)
  px,過(guò)期時(shí)間(毫秒)
  nx,如果設(shè)置為T(mén)rue,則只有name不存在時(shí),當(dāng)前set操作才執(zhí)行,同setnx(name, value)
  xx,如果設(shè)置為T(mén)rue,則只有name存在時(shí),當(dāng)前set操作才執(zhí)行'''
setex(name, value, time)
#設(shè)置過(guò)期時(shí)間(秒)
psetex(name, time_ms, value)
#設(shè)置過(guò)期時(shí)間(豪秒)
          

mset()

            
#批量設(shè)置值
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)

            
#設(shè)置新值,打印原值
print(r.getset("name1","wangwu")) #輸出:zhangsan
print(r.get("name1")) #輸出:wangwu


          

getrange(key, start, end)

            
#根據(jù)字節(jié)獲取子序列
r.set("name","zhangsan")
print(r.getrange("name",0,3))#輸出:zhan


          

setrange(name, offset, value)

            
#修改字符串內(nèi)容,從指定字符串索引開(kāi)始向后替換,如果新值太長(zhǎng)時(shí),則向后添加
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, offset, value)

            
#對(duì)二進(jìn)制表示位進(jìn)行操作
''' name:redis的name
 offset,位的索引(將值對(duì)應(yīng)的ASCII碼變換成二進(jìn)制后再進(jìn)行索引)
 value,值只能是 1 或 0 '''
str="345"
r.set("name",str)
for i in str:
 print(i,ord(i),bin(ord(i)))#輸出 值、ASCII碼中對(duì)應(yīng)的值、對(duì)應(yīng)值轉(zhuǎn)換的二進(jìn)制
'''
輸出:
 3 51 0b110011
 4 52 0b110100
 5 53 0b110101'''
r.setbit("name",6,0)#把第7位改為0,也就是3對(duì)應(yīng)的變成了0b110001
print(r.get("name"))#輸出:145


          

getbit(name, offset)

            
#獲取name對(duì)應(yīng)值的二進(jìn)制中某位的值(0或1)
r.set("name","3") # 對(duì)應(yīng)的二進(jìn)制0b110011
print(r.getbit("name",5)) #輸出:0
print(r.getbit("name",6)) #輸出:1


          

bitcount(key, start=None, end=None)

            
#獲取對(duì)應(yīng)二進(jìn)制中1的個(gè)數(shù)
r.set("name","345")#0b110011 0b110100 0b110101
print(r.bitcount("name",start=0,end=1)) #輸出:7
''' key:Redis的name
 start:字節(jié)起始位置
 end:字節(jié)結(jié)束位置'''


          

strlen(name)

            
#返回name對(duì)應(yīng)值的字節(jié)長(zhǎng)度(一個(gè)漢字3個(gè)字節(jié))
r.set("name","zhangsan")
print(r.strlen("name")) #輸出:8


          

incr(self, name, amount=1)

            
#自增mount對(duì)應(yīng)的值,當(dāng)mount不存在時(shí),則創(chuàng)建mount=amount,否則,則自增,amount為自增數(shù)(整數(shù))
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, name, amount=1.0)

            
#類似 incr() 自增,amount為自增數(shù)(浮點(diǎn)數(shù))


          

decr(self, name, amount=1)

            
#自減name對(duì)應(yīng)的值,當(dāng)name不存在時(shí),則創(chuàng)建name=amount,否則,則自減,amount為自增數(shù)(整數(shù))


          

append(name, value)

            
#在name對(duì)應(yīng)的值后面追加內(nèi)容
r.set("name","zhangsan")
print(r.get("name")) #輸出:'zhangsan
r.append("name","lisi")
print(r.get("name")) #輸出:zhangsanlisi


          

2、Hash 操作

redis中的Hash 在內(nèi)存中類似于一個(gè)name對(duì)應(yīng)一個(gè)dic來(lái)存儲(chǔ)

hset(name, key, value)

            
#name對(duì)應(yīng)的hash中設(shè)置一個(gè)鍵值對(duì)(不存在,則創(chuàng)建,否則,修改)
r.hset("dic_name","a1","aa")


          

hget(name,key)

            
r.hset("dic_name","a1","aa")
#在name對(duì)應(yīng)的hash中根據(jù)key獲取value
print(r.hget("dic_name","a1"))#輸出:aa


          

hgetall(name)

            
#獲取name對(duì)應(yīng)hash的所有鍵值
print(r.hgetall("dic_name"))


          

hmset(name, mapping)

            
#在name對(duì)應(yīng)的hash中批量設(shè)置鍵值對(duì),mapping:字典
dic={"a1":"aa","b1":"bb"}
r.hmset("dic_name",dic)
print(r.hget("dic_name","b1"))#輸出:bb


          

hmget(name, keys, *args)

            
# 在name對(duì)應(yīng)的hash中獲取多個(gè)key的值
li=["a1","b1"]
print(r.hmget("dic_name",li))
print(r.hmget("dic_name","a1","b1"))


          

hlen(name)、hkeys(name)、hvals(name)

            
dic={"a1":"aa","b1":"bb"}
r.hmset("dic_name",dic)
#hlen(name) 獲取hash中鍵值對(duì)的個(gè)數(shù)
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對(duì)應(yīng)的hash是否存在當(dāng)前傳入的key
print(r.hexists("dic_name","a1"))#輸出:True


          

hdel(name,*keys)

            
#刪除指定name對(duì)應(yīng)的key所在的鍵值對(duì)
r.hdel("dic_name","a1")


          

hincrby(name, key, amount=1)

            
#自增hash中key對(duì)應(yīng)的值,不存在則創(chuàng)建key=amount(amount為整數(shù))
print(r.hincrby("demo","a",amount=2))
hincrbyfloat(name, key, amount=1.0)


          
            
#自增hash中key對(duì)應(yīng)的值,不存在則創(chuàng)建key=amount(amount為浮點(diǎn)數(shù))


          

hscan(name, cursor=0, match=None, count=None)

hscan_iter(name, match=None, count=None)

3、List 操作

redis中的List在在內(nèi)存中按照一個(gè)name對(duì)應(yīng)一個(gè)List來(lái)存儲(chǔ)

lpush(name,values)

            
# 在name對(duì)應(yīng)的list中添加元素,每個(gè)新的元素都添加到列表的最左邊
r.lpush("list_name",2)
r.lpush("list_name",3,4,5)#保存在列表中的順序?yàn)?,4,3,2


          

rpush(name,values)

            
#同lpush,但每個(gè)新的元素都添加到列表的最右邊


          

lpushx(name,value)

            
#在name對(duì)應(yīng)的list中添加元素,只有name已經(jīng)存在時(shí),值添加到列表的最左邊


          

rpushx(name,value)

            
#在name對(duì)應(yīng)的list中添加元素,只有name已經(jīng)存在時(shí),值添加到列表的最右邊


          

llen(name)

            
# name對(duì)應(yīng)的list元素的個(gè)數(shù)
print(r.llen("list_name"))


          

linsert(name, where, refvalue, value))

            
# 在name對(duì)應(yīng)的列表的某一個(gè)值前或后插入一個(gè)新值
r.linsert("list_name","BEFORE","2","SS")#在列表內(nèi)找到第一個(gè)元素2,在它前面插入SS
'''參數(shù):
  name: redis的name
  where: BEFORE(前)或AFTER(后)
  refvalue: 列表內(nèi)的值
  value: 要插入的數(shù)據(jù)'''


          

r.lset(name, index, value)

            
#對(duì)list中的某一個(gè)索引位置重新賦值
r.lset("list_name",0,"bbb")


          

r.lrem(name, value, num)

            
#刪除name對(duì)應(yīng)的list中的指定值
r.lrem("list_name","SS",num=0)
''' 參數(shù):
 name: redis的name
 value: 要?jiǎng)h除的值
 num: num=0 刪除列表中所有的指定值;
   num=2 從前到后,刪除2個(gè);
   num=-2 從后向前,刪除2個(gè)'''


          

lpop(name)

            
#移除列表的左側(cè)第一個(gè)元素,返回值則是第一個(gè)元素
print(r.lpop("list_name"))


          

lindex(name, index)

            
#根據(jù)索引獲取列表內(nèi)元素
print(r.lindex("list_name",1))


          

lrange(name, start, end)

            
#分片獲取元素
print(r.lrange("list_name",0,-1))


          

ltrim(name, start, end)

            
#移除列表內(nèi)沒(méi)有在該索引之內(nèi)的值
r.ltrim("list_name",0,2)


          

rpoplpush(src, dst)

            
# 從一個(gè)列表取出最右邊的元素,同時(shí)將其添加至另一個(gè)列表的最左邊
#src 要取數(shù)據(jù)的列表
#dst 要添加數(shù)據(jù)的列表


          

brpoplpush(src, dst, timeout=0)

            
#同rpoplpush,多了個(gè)timeout, timeout:取數(shù)據(jù)的列表沒(méi)元素后的阻塞時(shí)間,0為一直阻塞
r.brpoplpush("list_name","list_name1",timeout=0)


          

blpop(keys, timeout)

            
#將多個(gè)列表排列,按照從左到右去移除各個(gè)列表內(nèi)的元素
r.lpush("list_name",3,4,5)
r.lpush("list_name1",3,4,5)
while True:
 print(r.blpop(["list_name","list_name1"],timeout=0))
 print(r.lrange("list_name",0,-1),r.lrange("list_name1",0,-1))
'''keys: redis的name的集合
 timeout: 超時(shí)時(shí)間,獲取完所有列表的元素之后,阻塞等待列表內(nèi)有數(shù)據(jù)的時(shí)間(秒), 0 表示永遠(yuǎn)阻塞'''


          

r.brpop(keys, timeout)

            
#同blpop,將多個(gè)列表排列,按照從右像左去移除各個(gè)列表內(nèi)的元素


          

4、Set 操作

Set集合就是不允許重復(fù)的列表

sadd(name,values)

            
#給name對(duì)應(yīng)的集合中添加元素
r.sadd("set_name","aa")
r.sadd("set_name","aa","bb")


          

smembers(name)

            
#獲取name對(duì)應(yīng)的集合的所有成員


          

scard(name)

            
#獲取name對(duì)應(yīng)的集合中的元素個(gè)數(shù)
r.scard("set_name")


          

sdiff(keys, *args)

            
#在第一個(gè)name對(duì)應(yīng)的集合中且不在其他name對(duì)應(yīng)的集合的元素集合
r.sadd("set_name","aa","bb")
r.sadd("set_name1","bb","cc")
r.sadd("set_name2","bb","cc","dd")
print(r.sdiff("set_name","set_name1","set_name2"))#輸出:{aa}


          

sdiffstore(dest, keys, *args)

            
#相當(dāng)于把sdiff獲取的值加入到dest對(duì)應(yīng)的集合中


          

sinter(keys, *args)

            
# 獲取多個(gè)name對(duì)應(yīng)集合的并集
r.sadd("set_name","aa","bb")
r.sadd("set_name1","bb","cc")
r.sadd("set_name2","bb","cc","dd")
print(r.sinter("set_name","set_name1","set_name2"))#輸出:{bb}


          

sinterstore(dest, keys, *args)

            
#獲取多個(gè)name對(duì)應(yīng)集合的并集,再講其加入到dest對(duì)應(yīng)的集合中


          

sismember(name, value)

            
#檢查value是否是name對(duì)應(yīng)的集合內(nèi)的元素


          

smove(src, dst, value)

            
#將某個(gè)元素從一個(gè)集合中移動(dòng)到另外一個(gè)集合


          

spop(name)

            
#從集合的右側(cè)移除一個(gè)元素,并將其返回


          

srandmember(name, numbers)

            
# 從name對(duì)應(yīng)的集合中隨機(jī)獲取numbers個(gè)元素
print(r.srandmember("set_name2",2))


          

srem(name, values)

            
#刪除name對(duì)應(yīng)的集合中的某些值
print(r.srem("set_name2","bb","dd"))


          

sunion(keys, *args)

            
#獲取多個(gè)name對(duì)應(yīng)的集合的并集
r.sunion("set_name","set_name1","set_name2")


          

sunionstore(dest,keys, *args)

            
#獲取多個(gè)name對(duì)應(yīng)的集合的并集,并將結(jié)果保存到dest對(duì)應(yīng)的集合中


          

有序集合:

在集合的基礎(chǔ)上,為每元素排序,元素的排序需要根據(jù)另外一個(gè)值來(lái)進(jìn)行比較,所以,對(duì)于有序集合,每一個(gè)元素有兩個(gè)值,即:值和分?jǐn)?shù),分?jǐn)?shù)專門(mén)用來(lái)做排序。

zadd(name, *args, **kwargs)

            
# 在name對(duì)應(yīng)的有序集合中添加元素
r.zadd("zset_name", "a1", 6, "a2", 2,"a3",5)
#或
r.zadd('zset_name1', b1=10, b2=5)


          

zcard(name)

            
#獲取有序集合內(nèi)元素的數(shù)量


          

zcount(name, min, max)

            
#獲取有序集合中分?jǐn)?shù)在[min,max]之間的個(gè)數(shù)
print(r.zcount("zset_name",1,5))


          

zincrby(name, value, amount)

            
#自增有序集合內(nèi)value對(duì)應(yīng)的分?jǐn)?shù)
r.zincrby("zset_name","a1",amount=2)#自增zset_name對(duì)應(yīng)的有序集合里a1對(duì)應(yīng)的分?jǐn)?shù)


          

zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)

            
# 按照索引范圍獲取name對(duì)應(yīng)的有序集合的元素
aa=r.zrange("zset_name",0,1,desc=False,withscores=True,score_cast_func=int)
print(aa)
'''參數(shù):
 name redis的name
 start 有序集合索引起始位置
 end  有序集合索引結(jié)束位置
 desc 排序規(guī)則,默認(rèn)按照分?jǐn)?shù)從小到大排序
 withscores 是否獲取元素的分?jǐn)?shù),默認(rèn)只獲取元素的值
 score_cast_func 對(duì)分?jǐn)?shù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換的函數(shù)'''


          

zrevrange(name, start, end, withscores=False, score_cast_func=float)

            
#同zrange,集合是從大到小排序的


          

zrank(name, value)、zrevrank(name, value)

            
#獲取value值在name對(duì)應(yīng)的有序集合中的排行位置(從0開(kāi)始)
print(r.zrank("zset_name", "a2"))
print(r.zrevrank("zset_name", "a2"))#從大到小排序


          

zscore(name, value)

            
#獲取name對(duì)應(yīng)有序集合中 value 對(duì)應(yīng)的分?jǐn)?shù)
print(r.zscore("zset_name","a1"))


          

zrem(name, values)

            
#刪除name對(duì)應(yīng)的有序集合中值是values的成員
r.zrem("zset_name","a1","a2")


          

zremrangebyrank(name, min, max)

            
#根據(jù)排行范圍刪除


          

zremrangebyscore(name, min, max)

            
#根據(jù)分?jǐn)?shù)范圍刪除


          

zinterstore(dest, keys, aggregate=None)

            
r.zadd("zset_name", "a1", 6, "a2", 2,"a3",5)
r.zadd('zset_name1', a1=7,b1=10, b2=5)
# 獲取兩個(gè)有序集合的交集并放入dest集合,如果遇到相同值不同分?jǐn)?shù),則按照aggregate進(jìn)行操作
# aggregate的值為: SUM MIN MAX
r.zinterstore("zset_name2",("zset_name1","zset_name"),aggregate="MAX")
print(r.zscan("zset_name2"))


          

zunionstore(dest, keys, aggregate=None)

            
#獲取兩個(gè)有序集合的并集并放入dest集合,其他同zinterstore,


          

其他常用操作

delete(*names)

            
#根據(jù)name刪除redis中的任意數(shù)據(jù)類型


          

exists(name)

            
#檢測(cè)redis的name是否存在


          

keys(pattern='*')

            
#根據(jù)* ?等通配符匹配獲取redis的name


          

expire(name ,time)

            
# 為某個(gè)name設(shè)置超時(shí)時(shí)間


          

rename(src, dst)

            
# 重命名


          

move(name, db))

            
# 將redis的某個(gè)值移動(dòng)到指定的db下


          

randomkey()

            
#隨機(jī)獲取一個(gè)redis的name(不刪除)


          

type(name)

            
# 獲取name對(duì)應(yīng)值的類型


          

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》、《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門(mén)與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 林芝县| 赤城县| 家居| 犍为县| 宜都市| 江陵县| 英德市| 东平县| 崇义县| 扶沟县| 仁化县| 合肥市| 韩城市| 望城县| 宁夏| 桂林市| 舟曲县| 阿城市| 个旧市| 镇江市| 沁阳市| 屏山县| 米脂县| 牡丹江市| 新乡县| 六盘水市| 山阳县| 鲁甸县| 宕昌县| 玉田县| 青海省| 商南县| 平远县| 沈阳市| 农安县| 庆阳市| 平武县| 乌拉特中旗| 汪清县| 云安县| 崇礼县|