亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python 分布式緩存之Reids數(shù)據(jù)類(lèi)型操作詳解

瀏覽:99日期:2022-07-19 15:36:14

1、Redis API

1.安裝redis模塊

$ pip3.8 install redis

2.使用redis模塊

import redis# 連接redis的ip地址/主機(jī)名,port,password=Noner = redis.Redis(host='127.0.0.1',port=6379,password='gs123456')

3.redis連接池

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è)連接池。

總之,當(dāng)程序創(chuàng)建數(shù)據(jù)源實(shí)例時(shí),系統(tǒng)會(huì)一次性創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)連接,并把這些數(shù)據(jù)庫(kù)連接保存在連接池中,當(dāng)程序需要進(jìn)行數(shù)據(jù)庫(kù)訪問(wèn)時(shí),無(wú)需重新新建數(shù)據(jù)庫(kù)連接,而是從連接池中取出一個(gè)空閑的數(shù)據(jù)庫(kù)連接

import redis# 創(chuàng)建連接池,將連接保存在連接池中pool = redis.ConnectionPool(host='127.0.0.1',port=6379,password='gs123456',max_connections=10)# 創(chuàng)建一個(gè)redis實(shí)例,并使用連接池'pool'r = redis.Redis(connection_pool=pool)

2、String 操作

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

Python 分布式緩存之Reids數(shù)據(jù)類(lèi)型操作詳解

1. set 為name設(shè)置值

# 在Redis中設(shè)置值,默認(rèn),不存在則創(chuàng)建,存在則修改set(name, value, ex=None, px=None, nx=False, xx=False, keepttl=False)name:設(shè)置鍵value:設(shè)置值ex:設(shè)置過(guò)期時(shí)間(秒級(jí))px:設(shè)置過(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í)行

set用法:

r.set('name1','jack',ex=3600)r.set('name2','xander',xx=36000)

setnx用法:

# 設(shè)置值,只有name不存在時(shí),執(zhí)行設(shè)置操作(添加)setnx(name, value)

setex用法:

# 設(shè)置值,參數(shù):time -->過(guò)期時(shí)間(數(shù)字秒 或 timedelta對(duì)象)setex(name, value, time)

psetex用法:

# 設(shè)置值,參數(shù):time_ms,過(guò)期時(shí)間(數(shù)字毫秒 或 timedelta對(duì)象)psetex(name, time_ms, value)

2. get 獲取name的值

# 根據(jù)key獲取值get(name)r.get('foo')

3. mset 批量設(shè)置name的值:

mset(mapping)data = { 'k1':'v1', 'k2':'v2',}r.mset(data)

4. Mget 批量獲取name的值

# 批量獲取值,根據(jù)多key獲取多個(gè)值mgets(mapping)# 方法一r.mget('k1','k2')# 方法二data = ['k1','k2']r.mget(data)# 方法三data = ('k1','k2')r.mget(data)

5. getset 設(shè)置新值并獲取原來(lái)的值

getset(name, value)r.set('foo', 'xoo')ret = r.getset('foo', 'yoo')print(ret) # b’xoo’

6. append 為name原有值后追加內(nèi)容

# key對(duì)應(yīng)值的后面追加內(nèi)容append(key, value)r.set('name','jack')r.append('name','-m')ret = r.get('name')print(ret) # b’jack-m’

7. strlen 返回name的值字節(jié)長(zhǎng)度:

# 返回字符串的長(zhǎng)度,當(dāng)name不存在時(shí)返回0strlen(name)r.set('name','jack-')ret = r.strlen('name')print(ret) # 5

8. incr 為name整數(shù)累加值

# 自增mount對(duì)應(yīng)的值,當(dāng)mount不存在時(shí),則創(chuàng)建mount=amount,否則,則自增,amount為自增數(shù)(整數(shù))incr(name, amount=1)r.incr(’mount’)r.incr(’mount’)r.incr(’mount’, amount=3)ret = r.get(’mount’)print(ret)# b’5’

3、Hash 操作

hash表現(xiàn)形式上有些像pyhton中的dict,可以存儲(chǔ)一組關(guān)聯(lián)性較強(qiáng)的數(shù)據(jù) ,redis中Hash在內(nèi)存中的存儲(chǔ)格式如下圖:

Python 分布式緩存之Reids數(shù)據(jù)類(lèi)型操作詳解

1. hset 為name設(shè)置單個(gè)鍵值對(duì)

# name對(duì)應(yīng)的hash中設(shè)置一個(gè)鍵值對(duì)(不存在,則創(chuàng)建;否則,修改)hset(name, key, value)name:設(shè)置namekey:name對(duì)應(yīng)hash中的key(鍵)value:name對(duì)應(yīng)的hash中的value(值)

hset用法

# 一次只能設(shè)置一個(gè)鍵值對(duì)r.hset('student-jack', 'name', 'Jack')

2 . hget 獲取name單個(gè)鍵值對(duì)

# 根據(jù)name對(duì)應(yīng)的hash中獲取根據(jù)key獲取valuehget(name,key)ret = r.hget('student-jack', 'name')print(ret) // b’Jack’

3. hmset 為name設(shè)置多個(gè)鍵值對(duì)

# mapping中傳入字典(不存在,則創(chuàng)建;否則,修改)hmset(name, mapping):data = { 'name': 'Jack', 'age': 20, 'gender': 'M',}r.hmset('student-jack', mapping=data)

4. hmget 獲取name多個(gè)鍵值對(duì)

# 根據(jù)name對(duì)應(yīng)的hash中獲取多個(gè)key的值hmget(name, keys, *args)name:指定namekeys:要獲取key集合,如:[’k1’, ’k2’, ’k3’]*args:要獲取的key,如:k1,k2,k3# 直接傳入需要獲取的鍵ret = r.hmget('student-jack', 'name', 'age')print(ret) # [b’Jack’, b’20’]# 列表中指定需要獲取的鍵data = ['name', 'age']ret = r.hmget('student-jack', data)print(ret) # [b’Jack’, b’20’]

5. hgetall 獲取name的鍵值對(duì)

# 根據(jù)name獲取hash的所有值hgetall(name)ret = r.hgetall('student-jack')print(ret) # {b’name’: b’Jack’, b’age’: b’20’, b’gender’: b’M’}

6、hlen 獲取name中的鍵值對(duì)個(gè)數(shù)

# 根據(jù)name獲取hash中鍵值對(duì)的總個(gè)數(shù)hlen(name)ret = r.hlen('student-jack')print(ret) # 3 , 3個(gè)鍵值對(duì)

7. hkeys 獲取name中鍵值對(duì)所有key

# 獲取name里鍵值對(duì)的keyhkeys(name)ret = r.hkeys(’student-jack’)print(ret) # [b’name’, b’age’, b’gender’]

8. hvals 獲取name中鍵值對(duì)所有value

# 獲取name里鍵值對(duì)的valuehvals(name)ret = r.hvals(’student-jack’)print(ret) # [b’Jack’, b’20’, b’M’]

9. hkeys 檢查name里的鍵值對(duì)是否有對(duì)應(yīng)的key

# 根據(jù)name檢查對(duì)應(yīng)的hash是否存在當(dāng)前傳入的keyhexists(name, key)# 返回布爾值ret = r.hexists(’student-jack’, ’name’)print(ret)# True

10. hincrby 從name里的鍵值對(duì)設(shè)置自增值

1.整數(shù)自增:

# 自增name對(duì)應(yīng)的hash中的指定key的值,不存在則創(chuàng)建key=amounthincrby(name, key, amount=1)name:設(shè)置鍵key:hash對(duì)應(yīng)的keyamount:自增數(shù)(整數(shù))ret = r.hincrby(’student-jack’, ’age’)ret = r.hincrby(’student-jack’, ’age’)print(ret)# 22

2.浮點(diǎn)自增

# 自增name對(duì)應(yīng)的hash中的指定key的值,不存在則創(chuàng)建key=amounthincrbyfloat(name, key, amount=1.0)name:設(shè)置鍵key:hash對(duì)應(yīng)的keyamount:自增數(shù)(浮點(diǎn)數(shù))

11. hdel 根據(jù)name從鍵值對(duì)中刪除指定key

# 根據(jù)name將對(duì)應(yīng)hash中指定的key鍵值對(duì)刪除hdel(name,*keys)r.hdel('info',*('m-k1','m-k2'))

4、List 操作

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

Python 分布式緩存之Reids數(shù)據(jù)類(lèi)型操作詳解

1. lpush 為name添加元素,每個(gè)新的元素都添加到列表的最左邊

# name對(duì)應(yīng)的list中添加元素lpush(name,values)# 直接指定多個(gè)元素r.lpush('names', 'Jack', 'Alex', 'Eric')# 將需要添加的元素添加到元組data = ('Jack', 'Alex', 'Eric')r.rpush('names', *data)# 將需要添加的元素添加到列表data = ['Jack', 'Alex', 'Eric']r.rpush('names', *data)

Note:列表類(lèi)型中的值統(tǒng)稱(chēng)元素

2. rpush 為name添加元素,每個(gè)新的元素都添加到列表的最右邊

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

3. lpushx 為name添加元素,只有當(dāng)name已存在時(shí),將元素添加至列表最左邊

lpushx(name,value)

4. rpushx 同上,將元素添加至列表最右邊

rpushx(name, values)

5. llen 統(tǒng)計(jì)name中l(wèi)ist的元素個(gè)數(shù)

# name對(duì)應(yīng)的list元素的個(gè)數(shù)llen(name)ret = r.llen(’names’)print(ret) # 3, 該list中有3個(gè)元素

6. linsert 為name中l(wèi)ist的某一個(gè)值或后 插入一個(gè)新的值

# 在name對(duì)應(yīng)的列表的某一個(gè)值前或后插入一個(gè)新值linsert(name, where, refvalue, value)name:設(shè)置namewhere:BEFORE或AFTERrefvalue:標(biāo)桿值,即:在它前后插入數(shù)據(jù)value:要插入的數(shù)據(jù)// 在Alex值前插入一個(gè)值(BEFORE表示:在...之前)r.linsert(’names’, ’BEFORE’, ’Jack’, ’Jason’)// 在Jack后插入一個(gè)值(AFTER表示:在...之后)r.linsert(’names’, ’AFTER’, ’Jack’, ’Xander’)

7. lset 為name中l(wèi)ist的某一個(gè)索引位置的元素重新賦值

# 對(duì)name對(duì)應(yīng)的list中的某一個(gè)索引位置重新賦值lset(name, index, value)name:設(shè)置nameindex:list的索引位置value:要設(shè)置的值// 將索引為1的元素修改為Gigir.lset(’names’, 1, ’Gigi’)

8. lrem 移除name里對(duì)應(yīng)list的元素

# 在name對(duì)應(yīng)的list中刪除指定的值lrem(name, count, value)name:設(shè)置namevalue:要?jiǎng)h除的值count:count=0,刪除列表中的指定值; count=2,從前到后,刪除2個(gè); count=-2,從后向前,刪除2個(gè)r.lrem(’names’, count=2, value=’Xander’)

9. lpop 從name里的list獲取最左側(cè)的第一個(gè)元素,并在列表中移除,返回值是則是第一個(gè)元素

lpop(name)ret = r.lpop(’names’)print(ret)# b’Jason’

10. rpop 同上,從右側(cè)獲取第一個(gè)元素

rpop(name)

11. lindex 在name對(duì)應(yīng)的列表 根據(jù)索引獲取元素

# 在name對(duì)應(yīng)的列表中根據(jù)索引獲取列表元素lindex(name, index)ret = r.lindex(’names’, 0)print(ret)# b’Gigi’

12. ltrim 移除列表內(nèi)沒(méi)有在該索引之內(nèi)的值(截?cái)啵?/p>

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

13. lrange 在name對(duì)應(yīng)的列表 根據(jù)索引獲取數(shù)據(jù)

# 在name對(duì)應(yīng)的列表分片獲取數(shù)據(jù)lrange(name, start, end)name:設(shè)置namestart:索引的起始位置end:索引結(jié)束位置// 先添加點(diǎn)元素data = [’Jack’, ’Eric’, ’Koko’, ’Jason’, ’Alie’]r.rpush(’names’, *data)// 獲取列表所有元素ret = r.lrange(’names’, 0, -1)print(ret) # [b’Gigi’, b’Alex’, b’Jack’, b’Eric’, b’Koko’, b’Jason’, b’Alie’]// 獲取列表索引2-5的元素(包含2和5,即 2 3 4 5)ret = r.lrange(’names’, 2, 5)print(ret)# [b’Jack’, b’Eric’, b’Koko’, b’Jason’]// 獲取列表的最后一個(gè)元素ret = r.lrange(’names’, -1, -1)print(ret) # [b’Alie’]

到此這篇關(guān)于Python 分布式緩存之Reids數(shù)據(jù)類(lèi)型操作詳解的文章就介紹到這了,更多相關(guān)Python Reids數(shù)據(jù)類(lèi)型操作內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 亚洲综合日本 | 另类在线视频 | 香蕉久久久久久狠狠色 | 失禁h啪肉尿出来高h | 成年男女的免费视频网站 | 久久精品视频在线 | 成人精品一区二区久久 | 亚洲第一视频在线播放 | 在线观看国产一区 | 国产上床视频 | 国产在线日韩 | 大片毛片女女女女女女女 | 国产手机精品一区二区 | 交性视频免费看 | 一级风流片a级国产 | 97精品国产综合久久久久久欧美 | 精品国产一区二区三区久久 | 国产视频三级 | 成网站在线观看人免费 | 91久久亚洲最新一本 | 女人张开腿男人猛桶视频 | 午夜影院福利社 | 在线看欧美成人中文字幕视频 | 亚洲精品男人天堂 | 91精品国产高清久久久久久io | 特黄日韩免费一区二区三区 | 国产高清美女一级毛片久久 | 日韩在线欧美在线 | 中文国产成人精品久久96 | 日韩a级 | 亚洲色吧| 九九色视频在线观看 | 综合在线视频 | 69视频成人 | 亚洲欧美日韩成人一区在线 | 国产精品久久久久久一区二区 | 久久国产成人亚洲精品影院老金 | 一区二区三区在线 | 日本 | 久久一本 | 欧美一级欧美三级 | 亚洲国产三级在线观看 |