Python 操作redis
1、String 操作
redis中的String在在內(nèi)存中按照一個name對應(yīng)一個value來存儲
set()
#在Redis中設(shè)置值,默認(rèn)不存在則創(chuàng)建,存在則修改 r.set('name', 'zhangsan') '''參數(shù):set(name, value, ex=None, px=None, nx=False, xx=False)ex,過期時間(秒)px,過期時間(毫秒)nx,如果設(shè)置為True,則只有name不存在時,當(dāng)前set操作才執(zhí)行,同setnx(name, value)xx,如果設(shè)置為True,則只有name存在時,當(dāng)前set操作才執(zhí)行''' setex(name, value, time) #設(shè)置過期時間(秒)psetex(name, time_ms, value) #設(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")) #輸出:wangwugetrange(key, start, end)
#根據(jù)字節(jié)獲取子序列 r.set("name","zhangsan") print(r.getrange("name",0,3))#輸出:zhansetrange(name, offset, value)
#修改字符串內(nèi)容,從指定字符串索引開始向后替換,如果新值太長時,則向后添加 r.set("name","zhangsan") r.setrange("name",1,"z") print(r.get("name")) #輸出:zzangsan r.setrange("name",6,"zzzzzzz") print(r.get("name")) #輸出:zzangszzzzzzzsetbit(name, offset, value)
#對二進(jìn)制表示位進(jìn)行操作 ''' name:redis的nameoffset,位的索引(將值對應(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碼中對應(yīng)的值、對應(yīng)值轉(zhuǎn)換的二進(jìn)制 ''' 輸出:3 51 0b1100114 52 0b1101005 53 0b110101'''r.setbit("name",6,0)#把第7位改為0,也就是3對應(yīng)的變成了0b110001 print(r.get("name"))#輸出:145getbit(name, offset)
#獲取name對應(yīng)值的二進(jìn)制中某位的值(0或1) r.set("name","3") # 對應(yīng)的二進(jìn)制0b110011 print(r.getbit("name",5)) #輸出:0 print(r.getbit("name",6)) #輸出:1bitcount(key, start=None, end=None)
#獲取對應(yīng)二進(jìn)制中1的個數(shù) r.set("name","345")#0b110011 0b110100 0b110101 print(r.bitcount("name",start=0,end=1)) #輸出:7 ''' key:Redis的namestart:字節(jié)起始位置end:字節(jié)結(jié)束位置'''strlen(name)
#返回name對應(yīng)值的字節(jié)長度(一個漢字3個字節(jié)) r.set("name","zhangsan") print(r.strlen("name")) #輸出:8incr(self, name, amount=1)
#自增mount對應(yīng)的值,當(dāng)mount不存在時,則創(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")) #輸出:12incrbyfloat(self, name, amount=1.0)
#類似 incr() 自增,amount為自增數(shù)(浮點(diǎn)數(shù))decr(self, name, amount=1)
#自減name對應(yīng)的值,當(dāng)name不存在時,則創(chuàng)建name=amount,否則,則自減,amount為自增數(shù)(整數(shù))append(name, value)
#在name對應(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)存中類似于一個name對應(yīng)一個dic來存儲?
?hset(name, key, value)
#name對應(yīng)的hash中設(shè)置一個鍵值對(不存在,則創(chuàng)建,否則,修改) r.hset("dic_name","a1","aa")hget(name,key)
r.hset("dic_name","a1","aa") #在name對應(yīng)的hash中根據(jù)key獲取value print(r.hget("dic_name","a1"))#輸出:aahgetall(name)
#獲取name對應(yīng)hash的所有鍵值 print(r.hgetall("dic_name"))hmset(name, mapping)
#在name對應(yīng)的hash中批量設(shè)置鍵值對,mapping:字典 dic={"a1":"aa","b1":"bb"} r.hmset("dic_name",dic) print(r.hget("dic_name","b1"))#輸出:bbhmget(name, keys, *args)
# 在name對應(yīng)的hash中獲取多個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中鍵值對的個數(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對應(yīng)的hash是否存在當(dāng)前傳入的key print(r.hexists("dic_name","a1"))#輸出:Truehdel(name,*keys)
#刪除指定name對應(yīng)的key所在的鍵值對 r.hdel("dic_name","a1")hincrby(name, key, amount=1)
#自增hash中key對應(yīng)的值,不存在則創(chuàng)建key=amount(amount為整數(shù)) print(r.hincrby("demo","a",amount=2))hincrbyfloat(name, key, amount=1.0)
#自增hash中key對應(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)存中按照一個name對應(yīng)一個List來存儲?
lpush(name,values)
# 在name對應(yīng)的list中添加元素,每個新的元素都添加到列表的最左邊 r.lpush("list_name",2) r.lpush("list_name",3,4,5)#保存在列表中的順序?yàn)?,4,3,2rpush(name,values)
#同lpush,但每個新的元素都添加到列表的最右邊lpushx(name,value)
#在name對應(yīng)的list中添加元素,只有name已經(jīng)存在時,值添加到列表的最左邊rpushx(name,value)
#在name對應(yīng)的list中添加元素,只有name已經(jīng)存在時,值添加到列表的最右邊llen(name)
# name對應(yīng)的list元素的個數(shù) print(r.llen("list_name"))linsert(name, where, refvalue, value))
# 在name對應(yīng)的列表的某一個值前或后插入一個新值 r.linsert("list_name","BEFORE","2","SS")#在列表內(nèi)找到第一個元素2,在它前面插入SS'''參數(shù):name: redis的namewhere: BEFORE(前)或AFTER(后)refvalue: 列表內(nèi)的值value: 要插入的數(shù)據(jù)'''r.lset(name, index, value)
#對list中的某一個索引位置重新賦值 r.lset("list_name",0,"bbb")r.lrem(name, value, num)
#刪除name對應(yīng)的list中的指定值 r.lrem("list_name","SS",num=0)''' 參數(shù):name: redis的namevalue: 要刪除的值num: num=0 刪除列表中所有的指定值;num=2 從前到后,刪除2個;num=-2 從后向前,刪除2個'''lpop(name)
#移除列表的左側(cè)第一個元素,返回值則是第一個元素 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)沒有在該索引之內(nèi)的值 r.ltrim("list_name",0,2)rpoplpush(src, dst)
# 從一個列表取出最右邊的元素,同時將其添加至另一個列表的最左邊 #src 要取數(shù)據(jù)的列表 #dst 要添加數(shù)據(jù)的列表brpoplpush(src, dst, timeout=0)
#同rpoplpush,多了個timeout, timeout:取數(shù)據(jù)的列表沒元素后的阻塞時間,0為一直阻塞 r.brpoplpush("list_name","list_name1",timeout=0)blpop(keys, timeout)
#將多個列表排列,按照從左到右去移除各個列表內(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: 超時時間,獲取完所有列表的元素之后,阻塞等待列表內(nèi)有數(shù)據(jù)的時間(秒), 0 表示永遠(yuǎn)阻塞'''r.brpop(keys, timeout)
#同blpop,將多個列表排列,按照從右像左去移除各個列表內(nèi)的元素?
4、Set 操作
Set集合就是不允許重復(fù)的列表
sadd(name,values)
#給name對應(yīng)的集合中添加元素 r.sadd("set_name","aa") r.sadd("set_name","aa","bb")smembers(name)
#獲取name對應(yīng)的集合的所有成員scard(name)
#獲取name對應(yīng)的集合中的元素個數(shù) r.scard("set_name")sdiff(keys, *args)
#在第一個name對應(yīng)的集合中且不在其他name對應(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對應(yīng)的集合中sinter(keys, *args)
# 獲取多個name對應(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)
#獲取多個name對應(yīng)集合的并集,再講其加入到dest對應(yīng)的集合中sismember(name, value)
#檢查value是否是name對應(yīng)的集合內(nèi)的元素smove(src, dst, value)
#將某個元素從一個集合中移動到另外一個集合spop(name)
#從集合的右側(cè)移除一個元素,并將其返回srandmember(name, numbers)
# 從name對應(yīng)的集合中隨機(jī)獲取numbers個元素 print(r.srandmember("set_name2",2))srem(name, values)
#刪除name對應(yīng)的集合中的某些值 print(r.srem("set_name2","bb","dd"))sunion(keys, *args)
#獲取多個name對應(yīng)的集合的并集 r.sunion("set_name","set_name1","set_name2")sunionstore(dest,keys, *args)
#獲取多個name對應(yīng)的集合的并集,并將結(jié)果保存到dest對應(yīng)的集合中有序集合:
在集合的基礎(chǔ)上,為每元素排序,元素的排序需要根據(jù)另外一個值來進(jìn)行比較,所以,對于有序集合,每一個元素有兩個值,即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序。
zadd(name, *args, **kwargs)
# 在name對應(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]之間的個數(shù) print(r.zcount("zset_name",1,5))zincrby(name, value, amount)
#自增有序集合內(nèi)value對應(yīng)的分?jǐn)?shù) r.zincrby("zset_name","a1",amount=2)#自增zset_name對應(yīng)的有序集合里a1對應(yīng)的分?jǐn)?shù)zrange( name, start, end, desc=False, withscores=False, score_cast_func=float)
# 按照索引范圍獲取name對應(yīng)的有序集合的元素 aa=r.zrange("zset_name",0,1,desc=False,withscores=True,score_cast_func=int) print(aa) '''參數(shù):name redis的namestart 有序集合索引起始位置end 有序集合索引結(jié)束位置desc 排序規(guī)則,默認(rèn)按照分?jǐn)?shù)從小到大排序withscores 是否獲取元素的分?jǐn)?shù),默認(rèn)只獲取元素的值score_cast_func 對分?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對應(yīng)的有序集合中的排行位置(從0開始) print(r.zrank("zset_name", "a2"))print(r.zrevrank("zset_name", "a2"))#從大到小排序zscore(name, value)
#獲取name對應(yīng)有序集合中 value 對應(yīng)的分?jǐn)?shù) print(r.zscore("zset_name","a1"))zrem(name, values)
#刪除name對應(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)# 獲取兩個有序集合的交集并放入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)
#獲取兩個有序集合的并集并放入dest集合,其他同zinterstore,其他常用操作
delete(*names)
#根據(jù)name刪除redis中的任意數(shù)據(jù)類型exists(name)
#檢測redis的name是否存在keys(pattern='*')
#根據(jù)* ?等通配符匹配獲取redis的nameexpire(name ,time)
# 為某個name設(shè)置超時時間rename(src, dst)
# 重命名move(name, db))
# 將redis的某個值移動到指定的db下randomkey()
#隨機(jī)獲取一個redis的name(不刪除)type(name)
# 獲取name對應(yīng)值的類型轉(zhuǎn)載于:https://www.cnblogs.com/chairlin/p/10910320.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Python 操作redis的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swing之单选框和复选框
- 下一篇: python中ndarray和matri