您好,登錄后才能下訂單哦!
使用python怎么操作redis?針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
連接 Redis
import redisc
連接方式:redis提供了2個(gè)方法
1:StrictRedis:實(shí)現(xiàn)大部分官方的命令
2:Redis:是StrictRedis的子類,用于向后兼容舊版的redis。
官方推薦使用StrictRedis方法。
舉例(普通連接):
import redis #decode_responses=True 自動解碼 r = redis.Redis(host='127.0.0.1',port=6379,password='123456',db=0,decode_responses=True) #默認(rèn)數(shù)據(jù)庫為0 r = redis.StrictRedis(host='10.10.2.14',port=6379,password='123456',decode_responses=True) 連接池:connection pool
管理對一個(gè)redis server的所有連接,避免每次建立,釋放連接的開銷。默認(rèn),每個(gè)redis實(shí)例都會維護(hù)一個(gè)自己的連接池,可以直接建立一個(gè)連接池,作為參數(shù)傳給redis,這樣可以實(shí)現(xiàn)多個(gè)redis實(shí)例共享一個(gè)連接池。
舉例(連接池):
pool = redis.ConnectionPool(host='127.0.0.1',port=6379,password='123456',decode_responses=True) r = redis.Redis(connection_pool=pool)
一 STRING 字符串的操作
1. r.set 設(shè)置值
#在Redis中設(shè)置值,默認(rèn)不存在則創(chuàng)建,存在則修改 r.set('name', 'zhangsan') '''參數(shù): set(name, value, ex=None, px=None, nx=False, xx=False) ex,過期時(shí)間(秒) px,過期時(shí)間(毫秒) nx,如果設(shè)置為True,則只有name不存在時(shí),當(dāng)前set操作才執(zhí)行,同setnx(name, value) xx,如果設(shè)置為True,則只有name存在時(shí),當(dāng)前set操作才執(zhí)行'''
r.get('name')
3. mset 批量設(shè)置值
#批量設(shè)置值 r.mset(name1='zhangsan', name2='lisi') #或 r.mget({"name1":'zhangsan', "name2":'lisi'})
4. mget(keys, *args) 批量獲取
#批量獲取 print(r.mget("name1","name2")) #或 li=["name1","name2"] print(r.mget(li))
5. getset 設(shè)置新值,打印原值
#設(shè)置新值,打印原值 getset(name, value) print(r.getset("name1","wangwu")) #輸出:zhangsan print(r.get("name1")) #輸出:wangwu
6. getrange 根據(jù)字節(jié)獲取子序列
#根據(jù)字節(jié)獲取子序列 getrange(key, start, end) r.set("name","zhangsan") print(r.getrange("name",0,3))#輸出:zhan
7. setrange 修改字符串內(nèi)容,從指定字符串索引開始向后替換,如果新值太長時(shí),則向后添加
#修改字符串內(nèi)容,從指定字符串索引開始向后替換,如果新值太長時(shí),則向后添加 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
8. strlen(name) 返回name對應(yīng)值的字節(jié)長度
#返回name對應(yīng)值的字節(jié)長度(一個(gè)漢字3個(gè)字節(jié)) r.set("name","zhangsan") print(r.strlen("name")) #輸出:8
9. incr 值的累加 amount為累加的值
#自增mount對應(yīng)的值,當(dāng)mount不存在時(shí),則創(chuàng)建mount=amount,否則,則自增,amount為自增數(shù)(整數(shù)) incr(self, name, amount=1) 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
10. append 在name對應(yīng)的值后面追加內(nèi)容
#在name對應(yīng)的值后面追加內(nèi)容 append(name, value) r.set("name","zhangsan") print(r.get("name")) #輸出:'zhangsan r.append("name","lisi") print(r.get("name")) #輸出:zhangsanlisi
11.type 查看類型
r.type(name)
二 Hash 操作
redis中的Hash 在內(nèi)存中類似于一個(gè)name對應(yīng)一個(gè)dic來存儲
1. hset name對應(yīng)的hash中設(shè)置一個(gè)鍵值對(不存在,則創(chuàng)建,否則,修改)
#name對應(yīng)的hash中設(shè)置一個(gè)鍵值對(不存在,則創(chuàng)建,否則,修改) hset(name, key, value) r.hset("dic_name","a1","aa")
2. hget 在name對應(yīng)的hash中根據(jù)key獲取value
r.hset("dic_name","a1","aa") #在name對應(yīng)的hash中根據(jù)key獲取value hget(name,key) print(r.hget("dic_name","a1"))#輸出:aa
3. hgetall 獲取name對應(yīng)hash的所有鍵值
#獲取name對應(yīng)hash的所有鍵值 hgetall(name) print(r.hgetall("dic_name"))
4. hmset 在name對應(yīng)的hash中批量設(shè)置鍵值對,mapping:字典
#在name對應(yīng)的hash中批量設(shè)置鍵值對,mapping:字典 hmset(name, mapping) dic={"a1":"aa","b1":"bb"} r.hmset("dic_name",dic) print(r.hget("dic_name","b1"))#輸出:bb
5. hmget 在name對應(yīng)的hash中獲取多個(gè)key的值
# 在name對應(yīng)的hash中獲取多個(gè)key的值 hmget(name, keys, *args) li=["a1","b1"] print(r.hmget("dic_name",li)) print(r.hmget("dic_name","a1","b1"))
6.
hlen 獲取hash中鍵值對的個(gè)數(shù)
hkeys 獲取hash中所有的key的值
hvals 獲取hash中所有的value的值
dic={"a1":"aa","b1":"bb"} r.hmset("dic_name",dic) #hlen(name) 獲取hash中鍵值對的個(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"))
7. hexists 檢查name對應(yīng)的hash是否存在當(dāng)前傳入的key
#檢查name對應(yīng)的hash是否存在當(dāng)前傳入的key hexists(name, key) print(r.hexists("dic_name","a1"))#輸出:True
8. hdel 刪除指定name對應(yīng)的key所在的鍵值對
#刪除指定name對應(yīng)的key所在的鍵值對 hdel(name,*keys) r.hdel("dic_name","a1")
9. hincrby 自增hash中key對應(yīng)的值,不存在則創(chuàng)建key=amount(amount為整數(shù))
#自增hash中key對應(yīng)的值,不存在則創(chuàng)建key=amount(amount為整數(shù)) hincrby(name, key, amount=1) print(r.hincrby("demo","a",amount=2))
10.hincrbyfloat 自增hash中key對應(yīng)的值,不存在則創(chuàng)建key=amount(amount為浮點(diǎn)數(shù))
自增hash中key對應(yīng)的值,不存在則創(chuàng)建key=amount(amount為浮點(diǎn)數(shù))
hincrbyfloat(name, key, amount=1.0)
三 List 操作
redis中的List在內(nèi)存中按照一個(gè)name對應(yīng)一個(gè)List來存儲
1. lpush 在name對應(yīng)的list中添加元素,每個(gè)新的元素都添加到列表的最左邊
# 在name對應(yīng)的list中添加元素,每個(gè)新的元素都添加到列表的最左邊 lpush(name,values) r.lpush("list_name",2) r.lpush("list_name",3,4,5)#保存在列表中的順序?yàn)?,4,3,2
2.rpush 同lpush,但每個(gè)新的元素都添加到列表的最右邊
#同lpush,但每個(gè)新的元素都添加到列表的最右邊 rpush(name,values)
3. lpushx 在name對應(yīng)的list中添加元素,只有name已經(jīng)存在時(shí),值添加到列表的最左邊
#在name對應(yīng)的list中添加元素,只有name已經(jīng)存在時(shí),值添加到列表的最左邊 lpushx(name,value)
4. rpushx 在name對應(yīng)的list中添加元素,只有name已經(jīng)存在時(shí),值添加到列表的最右邊
#在name對應(yīng)的list中添加元素,只有name已經(jīng)存在時(shí),值添加到列表的最右邊 rpushx(name,value)
5. llen name對應(yīng)的list元素的個(gè)數(shù)
# name對應(yīng)的list元素的個(gè)數(shù) llen(name) print(r.llen("list_name"))
6. linsert 在name對應(yīng)的列表的某一個(gè)值前或后插入一個(gè)新值
# 在name對應(yīng)的列表的某一個(gè)值前或后插入一個(gè)新值 linsert(name, where, refvalue, value)) 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ù)'''
7. r.lset 對list中的某一個(gè)索引位置重新賦值
#對list中的某一個(gè)索引位置重新賦值 r.lset(name, index, varlue) r.lset("list_name",0,"bbb")
8. r.lrem 刪除name對應(yīng)的list中的指定值
#刪除name對應(yīng)的list中的指定值 r.lrem(name, count, value) r.lrem("list_name",3,'ssss') ''' 參數(shù): name: redis的name value: 要?jiǎng)h除的值 num: num=0 刪除列表中所有的指定值; num=2 從前到后,刪除2個(gè); num=-2 從后向前,刪除2個(gè)'''
9. lpop 移除列表的左側(cè)第一個(gè)元素,返回值則是第一個(gè)元素
#移除列表的左側(cè)第一個(gè)元素,返回值則是第一個(gè)元素 lpop(name) print(r.lpop("list_name"))
10. lindex 根據(jù)索引獲取列表內(nèi)元素
#根據(jù)索引獲取列表內(nèi)元素 lindex(name, index) print(r.lindex("list_name",1))
11. lrange 分片獲取元素
#分片獲取元素 lrange(name, start, end) print(r.lrange("list_name",0,-1))
12. ltrim 移除列表內(nèi)沒有在該索引之內(nèi)的值(裁剪)
#移除列表內(nèi)沒有在該索引之內(nèi)的值 ltrim(name, start, end) r.ltrim("list_name",0,2)
13. rpoplpush(src, dst) 從一個(gè)列表取出最右邊的元素,同時(shí)將其添加至另一個(gè)列表的最左邊
# 從一個(gè)列表取出最右邊的元素,同時(shí)將其添加至另一個(gè)列表的最左邊 #src 要取數(shù)據(jù)的列表 #dst 要添加數(shù)據(jù)的列表
四 Set 操作
Set集合就是不允許重復(fù)的列表
1. sadd(name,values) 給name對應(yīng)的集合中添加元素
#給name對應(yīng)的集合中添加元素 r.sadd("set_name","aa") r.sadd("set_name","aa","bb")
2. smembers(name) 獲取name對應(yīng)的集合的所有成員
#獲取name對應(yīng)的集合的所有成員
3. scard(name) 獲取name對應(yīng)的集合中的元素個(gè)數(shù)
#獲取name對應(yīng)的集合中的元素個(gè)數(shù) r.scard("set_name")
4. sdiff(keys, *args) 在第一個(gè)name對應(yīng)的集合中且不在其他name對應(yīng)的集合的元素集合
#在第一個(gè)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}
6. sinter(keys, *args) 獲取多個(gè)name對應(yīng)集合的并集
# 獲取多個(gè)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}
8.sismember 檢查value是否是name對應(yīng)的集合內(nèi)的元素
#檢查value是否是name對應(yīng)的集合內(nèi)的元素 sismember(name, value)
9. smove(src, dst, value) 將某個(gè)元素從一個(gè)集合中移動到另外一個(gè)集合
#將某個(gè)元素從一個(gè)集合中移動到另外一個(gè)集合
10. spop(name) 從集合的右側(cè)移除一個(gè)元素,并將其返回
#從集合的右側(cè)移除一個(gè)元素,并將其返回
11. srandmember(name, numbers) 從name對應(yīng)的集合中隨機(jī)獲取numbers個(gè)元素
# 從name對應(yīng)的集合中隨機(jī)獲取numbers個(gè)元素
print(r.srandmember("set_name2",2))
12. srem(name, values) 刪除name對應(yīng)的集合中的某些值
#刪除name對應(yīng)的集合中的某些值
print(r.srem("set_name2","bb","dd"))
13. sunion(keys, *args) 獲取多個(gè)name對應(yīng)的集合的并集
#獲取多個(gè)name對應(yīng)的集合的并集
r.sunion("set_name","set_name1","set_name2")
14. sunionstore(dest,keys, *args) 獲取多個(gè)name對應(yīng)的集合的并集,并將結(jié)果保存到dest對應(yīng)的集合中
#獲取多個(gè)name對應(yīng)的集合的并集,并將結(jié)果保存到dest對應(yīng)的集合中
五 有序集合 zset
有序集合:
在集合的基礎(chǔ)上,為每元素排序,元素的排序需要根據(jù)另外一個(gè)值來進(jìn)行比較,所以,對于有序集合,每一個(gè)元素有兩個(gè)值,即:值和分?jǐn)?shù),分?jǐn)?shù)專門用來做排序。
1. zadd(name, args, *kwargs)
# 在name對應(yīng)的有序集合中添加元素 r.zadd("zset_name", 6,"a1", 2, "a2", 5,"a3") #或 r.zadd('zset_name1', b1=10, b2=5)
2. zcard(name) 獲取有序集合內(nèi)元素的數(shù)量
#獲取有序集合內(nèi)元素的數(shù)量
3. zcount(name, min, max) 獲取有序集合中分?jǐn)?shù)在[min,max]之間的個(gè)數(shù)
#獲取有序集合中分?jǐn)?shù)在[min,max]之間的個(gè)數(shù) print(r.zcount("zset_name",1,5))
4. zincrby(name, value, amount) 自增有序集合內(nèi)value對應(yīng)的分?jǐn)?shù)
#自增有序集合內(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ù)
5. 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的name start 有序集合索引起始位置 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ù)'''
6. zrevrange(name, start, end, withscores=False, score_cast_func=float)
#同zrange,集合是從大到小排序的
7. zrank(name, value)、zrevrank(name, value)
#獲取value值在name對應(yīng)的有序集合中的排行位置(從0開始) print(r.zrank("zset_name", "a2")) print(r.zrevrank("zset_name", "a2"))#從大到小排序
8. zscore(name, value) 獲取name對應(yīng)有序集合中 value 對應(yīng)的分?jǐn)?shù)
#獲取name對應(yīng)有序集合中 value 對應(yīng)的分?jǐn)?shù) print(r.zscore("zset_name","a1"))
9. zrem(name, values) 刪除name對應(yīng)的有序集合中值是values的成員
#刪除name對應(yīng)的有序集合中值是values的成員 r.zrem("zset_name","a1","a2")
10. zremrangebyrank(name, min, max) 根據(jù)排行范圍刪除
#根據(jù)排行范圍刪除
11. zremrangebyscore(name, min, max) 根據(jù)分?jǐn)?shù)范圍刪除
#根據(jù)分?jǐn)?shù)范圍刪除
12. 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"))
13. zunionstore(dest, keys, aggregate=None)
#獲取兩個(gè)有序集合的并集并放入dest集合,其他同zinterstore,
其他常用操作
1. delete(*names) 根據(jù)name刪除redis中的任意數(shù)據(jù)類型
#根據(jù)name刪除redis中的任意數(shù)據(jù)類型
2. exists(name) 檢測redis的name是否存在
#檢測redis的name是否存在
3. keys(pattern='*') 根據(jù)* ?等通配符匹配獲取redis的name
#根據(jù)* ?等通配符匹配獲取redis的name
4. expire(name ,time) 為某個(gè)name設(shè)置超時(shí)時(shí)間
# 為某個(gè)name設(shè)置超時(shí)時(shí)間
5. rename(src, dst) 重命名
# 重命名
6. move(name, db)) 將redis的某個(gè)值移動到指定的db下
# 將redis的某個(gè)值移動到指定的db下
7. randomkey() 隨機(jī)獲取一個(gè)redis的name(不刪除)
#隨機(jī)獲取一個(gè)redis的name(不刪除)
8. type(name) 獲取name對應(yīng)值的類型
# 獲取name對應(yīng)值的類型
Python是一種編程語言,內(nèi)置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強(qiáng)大,在許多領(lǐng)域中都有廣泛的應(yīng)用,例如最熱門的大數(shù)據(jù)分析,人工智能,Web開發(fā)等。
關(guān)于使用python怎么操作redis問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。