下面看看Python模塊對(duì)Redis數(shù)據(jù)庫(kù)的連接與使用:
1.Python連接Redis數(shù)據(jù)庫(kù)方法:
import redis
res = redis.Redis(
host="127.0.0.1",
port=6379,
db=0,
password="XXXXXX",
decode_responses=True
)
res.set("name","Li")
print(res.get("name"))
redis.Redis()參數(shù)講解:
1.host:表示連接的主機(jī)的iP地址。
2.port:表示連接的端口。
3.db:表示使用的數(shù)據(jù)庫(kù)的標(biāo)號(hào)。
4.password:表示連接的數(shù)據(jù)庫(kù)的密碼。沒有不添加該參數(shù)即可。
5.decode_responses:我們從redis數(shù)據(jù)庫(kù)中取出的數(shù)據(jù)默認(rèn)為字節(jié)類型,加上該參數(shù)則將取出的數(shù)據(jù)默認(rèn)為字符串類型。
2.Python使用連接池連接Redis數(shù)據(jù)庫(kù):
import redis
connection = redis.ConnectionPool(
host="127.0.0.1",
port=6379,
password="XXXXXX",
decode_responses=True
)
res = redis.StrictRedis(connection_pool=connection)
res.set("name","666")
print(res.get("name"))
這里使用連接池的作用可以減少中間消耗的時(shí)間,當(dāng)我們這里用完這個(gè)連接后將他再次放回連接池中,別的實(shí)例使用可以直接使用而不需要重新連接數(shù)據(jù)庫(kù),這樣就大幅度的減少了的中間消耗的時(shí)間。
連接成功后,下面就是使用Python對(duì)redis數(shù)據(jù)庫(kù)的操作:
對(duì)字符串(String)內(nèi)部的操作:
1.res.set()函數(shù):
res.set("name","666",ex=m,px=n,nx=True,xx=True)
這里后四個(gè)參數(shù)中,ex與px不能共存,nx與xx也不能共存。
ex,px表示數(shù)據(jù)過期時(shí)間,ex是以秒作為單位,px是以毫秒作為單位。當(dāng)數(shù)據(jù)過期時(shí)鍵依舊存在,值變?yōu)镹one。
nx與xx表示數(shù)據(jù)插入數(shù)據(jù)庫(kù)的鍵的狀態(tài),nx(新建)為True表示當(dāng)鍵不存在時(shí)set操作的返回值為True,且新建數(shù)據(jù);而xx(修改)為True表示在鍵存在時(shí)set操作返回值為True,且修改數(shù)據(jù)。否則上述操作返回None。
**故上述操作衍生出的新函數(shù):res.setex(“鍵”,過期時(shí)間(秒),“值”) **
res.setnx(“鍵”,“值”) 鍵不存在,返回True并新建。
res.psetex(“鍵”,過期時(shí)間(毫秒),“值”)
res.mset({“鍵”:“值”,…}) 批量添加鍵-值數(shù)據(jù)。
res.mset(“鍵”,“鍵”,…) 批量增加鍵數(shù)據(jù)。
res.getset(“鍵”,“值”) 修改為新值并返回原值。
2.res.strlen(“鍵”) 返回鍵對(duì)應(yīng)的值的字節(jié)長(zhǎng)度。
3.res.incr(“鍵”,amount=自增的步長(zhǎng)) 不存在則創(chuàng)建,否則自增。
res.decr(“鍵”,amount=自減的步長(zhǎng)) 不存在則創(chuàng)建,否則自減。
res.incrbyfloat(“鍵”,amount=自增的步長(zhǎng)(浮點(diǎn)型))
4.res.append(“鍵”,“值”) 將值追加在鍵對(duì)應(yīng)的值 的 原始字符串后邊。
對(duì)哈希表(Hash)內(nèi)部的操作:
1.單個(gè)增加:res.hset(“Hash表名”,“鍵”,“值”)
2.批量增加:res.hmset(“Hash表名”,{“鍵值對(duì)”…})
3.單個(gè)取出:res.hget(“Hash表名”,“鍵”)
4.多個(gè)取出:res.hmget(“Hash表名”,“鍵”,“鍵”,…)
5.只能新建的方法:res.hsetnx(“Hash表名”,“鍵”,“值”) 當(dāng)沒有時(shí)才起新建得作用。
6.取出hash中的全部鍵值對(duì):res.hgetall(“Hash表名”)
7.得到hash中的hash長(zhǎng)度(即hash中的鍵值對(duì)個(gè)數(shù)):res.hlen(“Hash表名”)
8.得到hash中的所有的鍵:res.hkeys(“Hash表名”)
得到hash中的所有的值:res.hvals(“Hash表名”)
9.判斷hash中是否存在該成員:res.hexists(“Hash表名”,“鍵”)
10.刪除hash中的鍵值對(duì):hdel(“Hash表名”,“鍵”)
對(duì)列表(List)內(nèi)部的操作:
1.列表的添加操作: 從左向右添加: res.lpush(“List表名”,“值”,…)
從右向左添加:res.rpush(“List列表”,“值”,…)
這兩種方式如果沒有該列表就創(chuàng)建,res.l/rpushx()如果沒有不創(chuàng)建,且不插入
2.向固定的索引號(hào)位置插入元素:res.linsert(“表名”,“位置”,“將需要插入的元素插入到 ‘該元素' 之前的索引位置(m)”,“被插入的元素(n)”)
例如:res.linsert(“l(fā)ist2”, “before”, “11”, “00”) 往列表中左邊第一個(gè)出現(xiàn)的“m”元素前插入元素"n"。
3.修改(指定索引號(hào)進(jìn)行修改):res.lset(“表名”, index, “值”)
4.刪除指定索引的值:res.lrem(“表名”, “值”,矢量刪除數(shù)(正左負(fù)右0全部))
5.res.l/rpop(“表名”),移除表中的左/右邊的第一個(gè)數(shù)據(jù)并將值返回。
6.取值:res.lindex(“表名”,index)
對(duì)集合(Set)內(nèi)部的操作:
1.增加數(shù)據(jù):res.sadd(“集合名”,“值”)
2.獲取集合的全部成員:res.smembers(“集合名”)
3.獲取集合內(nèi)的數(shù)據(jù)數(shù)量:res.scard(“集合名”)
4.以元組格式獲取集合的全部成員:res.sscan(“集合名”)
5.判斷值是不是集合的成員:res.sismember(“集合名”,“值”)
6.刪除指定的值:res.srem(“集合名”,“值”)
對(duì)集合,列表,字符串,哈希的操作:
1.刪除:res.delete(“鍵”) 刪除該鍵的數(shù)據(jù),不受表類型的約束。
2.檢查名字是否存在:exists(“表名”)
3.模糊匹配:
KEYS * 匹配數(shù)據(jù)庫(kù)中所有 key 。
KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
KEYS hllo 匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo
上述為終端命令,下面是Python語(yǔ)法:
res.keys() 匹配數(shù)據(jù)庫(kù)中所有 key 。
res.keys("h?llo") 匹配 hello , hallo 和 hxllo 等。
res.keys("hllo") 匹配 hllo 和 heeeeello 等。
res.keys("h[ae]llo") 匹配 hello 和 hallo ,但不匹配 hillo
4.表級(jí)重命名:res.rename(“原名”,“新名”)
5.獲取表級(jí)的類型:res.type(“表名”)
6.查看所有元素:res.scan(“表名”)
7.查看所有元素并生成迭代器:res.scan_iter(“表名”)
8.獲取值:res.get(“鍵”)
9.查看當(dāng)前數(shù)據(jù)庫(kù)中包含多少條數(shù)據(jù):res.dbsize()
10.將數(shù)據(jù)寫回磁盤,保存時(shí)阻塞:res.save()
11.清空數(shù)據(jù)庫(kù)的所有數(shù)據(jù):res.flushdb()
管道(pipeline):
redis默認(rèn)在執(zhí)行每次請(qǐng)求都會(huì)創(chuàng)建(連接池申請(qǐng)連接)和斷開(歸還連接池)一次連接操作,如果想要在一次請(qǐng)求中指定多個(gè)命令,則可以使用pipline實(shí)現(xiàn)一次請(qǐng)求指定多個(gè)命令,并且默認(rèn)情況下一次pipline 是原子性操作。
管道(pipeline)是redis在提供單個(gè)請(qǐng)求中緩沖多條服務(wù)器命令的基類的子類。它通過減少服務(wù)器-客戶端之間反復(fù)的TCP數(shù)據(jù)庫(kù)包,從而大大提高了執(zhí)行批量命令的功能。
管道操作:
pipe = res.pipeline() # 創(chuàng)建一個(gè)管道
pipe.set('name', 123)
pipe.set('role', 456)
pipe.incr('num') # 如果num不存在則vaule為1,如果存在,則value自增1。
pipe.execute() # 無(wú)論多少操作最后都需要提交,類似于MySQL的事務(wù)。
上述代碼可以簡(jiǎn)化為:
pipe = res.pipeline() # 創(chuàng)建一個(gè)管道
pipe.set('name', 123).set('role', 456).incr('num').execute()
到此這篇關(guān)于Python模塊對(duì)Redis數(shù)據(jù)庫(kù)的連接與使用的文章就介紹到這了,更多相關(guān)Python Redis連接與使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python中re.findall函數(shù)實(shí)例用法
- python點(diǎn)云地面點(diǎn)濾波(Progressive Morphological Filter)算法介紹(PCL庫(kù))
- python3操作redis實(shí)現(xiàn)List列表實(shí)例
- Python List remove()實(shí)例用法詳解
- Python之re模塊案例詳解