Python訪問(wèn)Redis的詳細(xì)操作
1.連接
測(cè)試連接是否成功:
import redis r = redis.Redis(host='192.168.136.102', port=6379, db=0,decode_responses=True) r.set('foo', 'bar') print(r.get('foo')) del r
redis 取出的結(jié)果默認(rèn)是字節(jié),我們可以設(shè)定 decode_responses=True 改成字符串。
redis 提供兩個(gè)類(lèi) Redis 和 StrictRedis, StrictRedis 用于實(shí)現(xiàn)大部分官方的命令,Redis 是 StrictRedis 的子類(lèi),用于向后兼用舊版本。
import redis # 導(dǎo)入redis 模塊 r = redis.Redis(host='192.168.136.102', port=6379, decode_responses=True) r.set('name', 'runoob') # 設(shè)置 name 對(duì)應(yīng)的值 print(r['name']) print(r.get('name')) # 取出鍵 name 對(duì)應(yīng)的值 print(type(r.get('name'))) # 查看類(lèi)型 del r
連接池
redis-py 使用 connection pool 來(lái)管理對(duì)一個(gè) redis server 的所有連接,避免每次建立、釋放連接的開(kāi)銷(xiāo)。
默認(rèn),每個(gè)Redis實(shí)例都會(huì)維護(hù)一個(gè)自己的連接池??梢灾苯咏⒁粋€(gè)連接池,然后作為參數(shù) Redis,這樣就可以實(shí)現(xiàn)多個(gè) Redis 實(shí)例共享一個(gè)連接池。
import redis # 導(dǎo)入redis 模塊 pool = redis.ConnectionPool(host='192.168.136.102', port=6379, decode_responses=True) r = redis.Redis(connection_pool=pool) r.set('name', 'runoob') # 設(shè)置 name 對(duì)應(yīng)的值 print(r.get('name')) # 取出鍵 name 對(duì)應(yīng)的值
對(duì)比
2.String字符串
String使用場(chǎng)景:
1、用redis當(dāng)緩存層來(lái)加速讀寫(xiě)性能降低后端的壓力
2、計(jì)數(shù)器
3、時(shí)間內(nèi)限制請(qǐng)求次數(shù)
1.String set 設(shè)置單個(gè)鍵值
set(name, value, ex=None, px=None, nx=False, xx=False)
ex:過(guò)期時(shí)間(秒),時(shí)間到了后redis會(huì)自動(dòng)刪除
px:過(guò)期時(shí)間(毫秒),時(shí)間到了后redis會(huì)自動(dòng)刪除。ex、px二選一即可
nx:如果設(shè)置為T(mén)rue,則只有name不存在時(shí),當(dāng)前set操作才執(zhí)行
xx:如果設(shè)置為T(mén)rue,則只有name存在時(shí),當(dāng)前set操作才執(zhí)行
r.set('name', 'zhangsan',ex=3) r.set('name', 'lisi',nx=True) #如果設(shè)置為T(mén)rue,則只有name不存在時(shí),當(dāng)前set操作才執(zhí)行 r.set('name', 'wangwu',xx=True) #如果設(shè)置為T(mén)rue,則只有name存在時(shí),當(dāng)前set操作才執(zhí)行
2.String get 獲取單個(gè)值
v = r.get('name') print(v)
3.String mset 設(shè)置多個(gè)鍵值
mset(*args, **kwargs)
name_dict = { 'name_1' : 'zhangsan', 'name_2' : 'lisi' } r.mset(name_dict)
4.String mget 獲取多個(gè)值
mget(keys, *args) r.mget('name_1', 'name_2')
5.String setrange 根據(jù)索引修改某個(gè)鍵的value值
setrange(name, offset, value)
返回值為:修改后的字符串長(zhǎng)度
name:鍵,所給不存在時(shí)自動(dòng)添加
offset:偏移量,以0開(kāi)始
value:修改的字符或字符串,字符串時(shí)以offset向后順延
length = r.setrange('name_2', 1, 'zhihu') print(length)
6.String getrange 根據(jù)索引獲取某個(gè)鍵的部分value值
若所給的鍵不存在時(shí),返回空值 b''
getrange(key, start, end)
v = r.getrange('name_1', 0, 2)
7.String strlen 獲取value的長(zhǎng)度
strlen(name)
所給的鍵不存在時(shí),返回值為0
length = r.strlen('name_2')
8.String append value后面追加
append(key, value)
若所給的鍵不存在,則設(shè)置新值,返回值為修改后的字符串的長(zhǎng)度
length = r.append('name_1', '666')
3.列表
1.lpush(key , value) 將一個(gè)或多個(gè)值 value 插入到列表 key 的表頭
r.lpush('list', 'a', 'b', 'c', 'd')
2.rpush(key , value) 將一個(gè)或多個(gè)值 value 插入到列表 key 的表尾
r.rpush('rlist', 'a', 'b', 'c', 'd')
3.llen key 返回列表 key 的長(zhǎng)度
r.llen('list')
4.lrem key count value 根據(jù)參數(shù) count 的值,移除列表中與參數(shù) value 相等的元素
r.lrem('list',2, 'b')
4.集合
1.sadd(name,values) 向?qū)?yīng)的集合中添加元素
r.sadd("set1", 33, 44, 55, 66)
2.scard(name)
獲取name對(duì)應(yīng)的集合中元素個(gè)數(shù)
r.scard('set1')
3.srandmember key [count] 返回集合中的 1 或 count 個(gè)隨機(jī)元素
r.srandmember("set1")
4.spop key 移除并返回集合中的一個(gè)隨機(jī)元素獲取name對(duì)應(yīng)的集合中元素個(gè)數(shù)
r.spop('set1')
5.smove source destination member 將 member 元素從 source 集合移動(dòng)到 destination 集合
r.smove('set1', 'set2', 66)
5.哈希
1.hmset key field value [field value …]同時(shí)將多個(gè) field-value (域-值)對(duì)設(shè)置到哈希表 key 中
r.hmset('zhangsan',{'name':'zhangsan','age':20,'tel':123456})
2.Hash hmget 獲取哈希中多個(gè)鍵值對(duì)
hmget(name, keys, *args)
返回值:值的列表 list 形如: [‘1', ‘123'] <class ‘list'>
r.hmget('zhangsan', ['sex', 'tel'])
3.Hash hget 獲取指定key的值
hget(name, key)
r.hget('zhangsan', 'tel')
4.Hash hgetall 獲取哈希中所有的鍵值對(duì)
hgetall(name)
返回值:dict類(lèi)型
r.hgetall('zhangsan')
6.有序集合
1.Zset zadd 有序集合中添加元素
zadd(name, *args, **kwargs)
添加元素時(shí)需指定元素的分?jǐn)?shù)
返回值:返回添加的個(gè)數(shù)
r.zadd('myzset', {'a': 3, 'b': 4,'c':5}) r.zadd('myzset', 'a', 3, 'b', 4,'c',5}) #不同版本
2.Zset zcard 返回有序集合中元素個(gè)數(shù)
zcard(name)
v = r.zcard('myzset')
3.Zset zscore 返回有序集合中指定某個(gè)值的分?jǐn)?shù)
zscore(name, value)
返回值:float 類(lèi)型的分?jǐn)?shù);形如: -5.0 <class ‘float'>
v = r.zscore('myzset', ‘a(chǎn)')
4.Zset zincrby 增加有序集合中某個(gè)值的分?jǐn)?shù)
zincrby(name, value, amount=1)
value:若存在,則增加其amount分?jǐn)?shù);若不存在,則增加新值以及對(duì)應(yīng)的分?jǐn)?shù)
amount:增加的值,可以為負(fù)數(shù)
返回值:增加后的分?jǐn)?shù) float類(lèi)型 ;
v = r.zincrby('myzset',1,'a')
5.Zset zrevrange 返回有序集合分?jǐn)?shù)排序的一段數(shù)據(jù)
zrevrange(name, start, end, withscores=False, score_cast_func=float)
name:redis的name
start:有序集合索引起始位置(非分?jǐn)?shù))
end:有序集合索引結(jié)束位置(非分?jǐn)?shù))
withscores:是否獲取元素的分?jǐn)?shù),默認(rèn)只獲取元素的值
score_cast_func:對(duì)分?jǐn)?shù)進(jìn)行數(shù)據(jù)轉(zhuǎn)換的函數(shù)
返回值:list類(lèi)型
r.zadd('myzset1', {'a': 4, 'b': 2,'c':3,'d':6,'e':1,'f':9}) def double(num): return float(num)*float(num) print(r.zrevrange('myzset1',0,3,withscores=True)) print(r.zrevrange('myzset1',0,3,withscores=True,score_cast_func=double))
以上就是Python訪問(wèn)Redis的詳細(xì)內(nèi)容,更多關(guān)于Python訪問(wèn)Redis的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python操作Redis數(shù)據(jù)庫(kù)的超詳細(xì)教程
- python?實(shí)現(xiàn)?redis?數(shù)據(jù)庫(kù)的操作
- python導(dǎo)入導(dǎo)出redis數(shù)據(jù)的實(shí)現(xiàn)
- Python?Flask?+?Redis?程序練習(xí)
- 解決python-redis-lock分布式鎖的問(wèn)題
- python3使用python-redis-lock解決并發(fā)計(jì)算問(wèn)題
- python動(dòng)態(tài)網(wǎng)站爬蟲(chóng)實(shí)戰(zhàn)(requests+xpath+demjson+redis)
- Python利用Redis計(jì)算經(jīng)緯度距離案例
相關(guān)文章
python獲取當(dāng)前時(shí)間對(duì)應(yīng)unix時(shí)間戳的方法
這篇文章主要介紹了python獲取當(dāng)前時(shí)間對(duì)應(yīng)unix時(shí)間戳的方法,涉及Python時(shí)間操作的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-05-05Python&Matlab實(shí)現(xiàn)灰狼優(yōu)化算法的示例代碼
灰狼優(yōu)化算法是一種群智能優(yōu)化算法,它的獨(dú)特之處在于一小部分擁有絕對(duì)話語(yǔ)權(quán)的灰狼帶領(lǐng)一群灰狼向獵物前進(jìn)。本文具體介紹了灰狼優(yōu)化算法的兩種實(shí)現(xiàn)示例代碼,需要的可以參考一下2022-03-03django項(xiàng)目中新增app的2種實(shí)現(xiàn)方法
這篇文章主要介紹了django項(xiàng)目中新增app的2種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04實(shí)用自動(dòng)化運(yùn)維Python腳本分享
今天小編就為大家分享一篇實(shí)用自動(dòng)化運(yùn)維Python腳本。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06python簡(jiǎn)單實(shí)現(xiàn)基于SSL的IRC bot實(shí)例
這篇文章主要介紹了python簡(jiǎn)單實(shí)現(xiàn)基于SSL的IRC bot,實(shí)例分析了IRC機(jī)器人的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06Python?Flask框架實(shí)現(xiàn)小紅書(shū)圖片無(wú)水印解析下載
這篇文章主要為大家介紹了Python?Flask框架實(shí)現(xiàn)小紅書(shū)圖片無(wú)水印解析下載,需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11學(xué)習(xí)python之編寫(xiě)簡(jiǎn)單簡(jiǎn)單連接數(shù)據(jù)庫(kù)并執(zhí)行查詢(xún)操作
這篇文章主要介紹了學(xué)習(xí)python之編寫(xiě)簡(jiǎn)單簡(jiǎn)單連接數(shù)據(jù)庫(kù)并執(zhí)行查詢(xún)操作,需要的朋友可以參考下2016-02-02