python redis模塊詳解-曬酷學(xué)院

前言 現(xiàn)在越來越覺得知識(shí)的沉淀尤為重要,最近打算慢慢的把一些知識(shí)點(diǎn)做個(gè)記錄,如果長(zhǎng)期不用生疏了也可以快速回顧。下面我會(huì)依次介紹在python中常用組件redis,rabbitmq,mongodb,ES(lasticsearch),zk的用法。

這篇文章主要介紹redis的使用。

簡(jiǎn)單介紹下redis,一個(gè)高性能key-value的存儲(chǔ)系統(tǒng),支持存儲(chǔ)的類型有string、list、set、zset和hash。在處理大規(guī)模數(shù)據(jù)讀寫的場(chǎng)景下運(yùn)用比較多。

1.連接Redis數(shù)據(jù)庫:

1)直接連接

import redis

red = redis.Redis(host='localhost',port=6379,db=1)

2)連接池連接

連接池的原理是, 通過預(yù)先創(chuàng)建多個(gè)連接, 當(dāng)進(jìn)行redis操作時(shí), 直接獲取已經(jīng)創(chuàng)建的連接進(jìn)行操作, 而且操作完成后, 不會(huì)釋放, 用于后續(xù)的其他redis操作,這樣就達(dá)到了避免頻繁的redis連接創(chuàng)建和釋放的目的, 從而提高性能。redis模塊采用ConnectionPool來管理對(duì)redis server的所有連接。

import redis

pool = redis.ConnectionPool(host='localhost', port=6379,db=1)
red = redis.Redis(connection_pool=pool)
red.set('key1', 'value1')
red.set('key2', 'value2')

2.String類型存?。?/strong>

set(self, name, value, ex=None, px=None, nx=False, xx=False)

#在Redis中設(shè)置值,默認(rèn)不存在則創(chuàng)建,存在則修改
red.set('key', 'value')
#參數(shù):
#     set(name, value, ex=None, px=None, nx=False, xx=False)
#     ex,過期時(shí)間(秒)
#     px,過期時(shí)間(毫秒)
#     nx,如果設(shè)置為True,則只有key不存在時(shí),當(dāng)前set操作才執(zhí)行,同#setnx(key, value)
#     xx,如果設(shè)置為True,則只有key存在時(shí),當(dāng)前set操作才執(zhí)行


setex(self, name, value, time)
#設(shè)置過期時(shí)間(秒)

psetex(self, name, time_ms, value)
#設(shè)置過期時(shí)間(豪秒)

mset(self, *args, **kwargs)

#批量設(shè)置值
red.mset({"key1":'value1', "key2":'value2'})

get(self, name)

#獲取某個(gè)key的值
red.get('key1')

mget(self, keys, *args)

#批量獲取
red.mget("key1","key1")

strlen(self, name)

#返回key對(duì)應(yīng)值的字節(jié)長(zhǎng)度(一個(gè)漢字3個(gè)字節(jié))
red.strlen("key")

append(name, value)

#在name對(duì)應(yīng)的值后面追加內(nèi)容
red.set("key","value")
print(r.get("key"))    #輸出:'value'
r.append("key","one")
print(r.get("key"))    #輸出:'valueone'

3.Hash類型:一個(gè)name對(duì)應(yīng)一個(gè)dic字典來存儲(chǔ)。

hset(self, name, key, value)

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

hget(self, name, key)

red.hset("name","key","value")
#在name對(duì)應(yīng)的hash中根據(jù)key獲取value
print(red.hget("name","key"))#輸出:'value'

hgetall(self, name)

#獲取name所有鍵值對(duì)
red.hgetall("name")

hmset(self, name, mapping)

#在name對(duì)應(yīng)的hash中批量設(shè)置鍵值對(duì),mapping:字典
dic={"key1":"aa","key2":"bb"}
red.hmset("name",dic)
print(red.hget("name","key2"))#輸出:bb

hmget(self, name, keys, *args)

#在name對(duì)應(yīng)的hash中批量獲取鍵所對(duì)應(yīng)的值
dic={"key1":"aa","key2":"bb"}
red.hmset("name",dic)
print(red.hmget("name","key1","key2"))#輸出:['aa', 'bb']

hlen(self, name)

#獲取hash鍵值對(duì)的個(gè)數(shù)
print(red.hlen("name"))#輸出:2

hkeys(self, name)

#獲取hash中所有key
red.hkeys("name")

hvals(self, name)

#獲取hash中所有value
red.hvals("name")

hexists(self, name, key)

#檢查name對(duì)應(yīng)的hash是否存在當(dāng)前傳入的key
print(red.hexists("name","key1"))#輸出:Ture

hdel(self, name, *keys)

#刪除指定name對(duì)應(yīng)的key所在的鍵值對(duì),刪除成功返回1,失敗返回0
print(red.hdel("name","key1"))#輸出:1

hincrby(self, name, key, amount=1)

#與hash中key對(duì)應(yīng)的值相加,不存在則創(chuàng)建key=amount(amount為整數(shù))
print(red.hincrby("name","key",amount=10))#返回:10

4.list類型:一個(gè)name對(duì)應(yīng)一個(gè)列表存儲(chǔ)。

lpush(self, name, *values)

#元素從list的左邊添加,可以添加多個(gè)
red.lpush('name','元素1','元素2')

rpush(self, name, *values)

#元素從list右邊添加,可以添加多個(gè)
red.rpush('name','元素1','元素2')

lpushx(self, name, *values)

#當(dāng)name存在時(shí),元素才能從list的左邊加入
red.lpushx('name','元素1')

rpushx(self, name, *values)

#當(dāng)name存在時(shí),元素才能從list的右邊加入
red.rpushx('name','元素1')

llen(self, name)

#name列表長(zhǎng)度
red.llen('name')

linsert(self, name, where, refvalue, value)

# 在name對(duì)應(yīng)的列表的某一個(gè)值前或后插入一個(gè)新值
red.linsert("name","BEFORE","元素2","元素1.5")#在列表內(nèi)找到第一個(gè)"元素2",在它前面插入"元素1.5"

#參數(shù):
#     name: redis的name
#     where: BEFORE(前)或AFTER(后)
#     refvalue: 列表內(nèi)的值
#     value: 要插入的數(shù)據(jù)

lset(self, name, index, value)

#對(duì)list中的某一個(gè)索引位置重新賦值
red.lset("name",0,"abc")

lrem(self, name, value, num=0)

#刪除name對(duì)應(yīng)的list中的指定值
red.lrem("name","元素1",num=0)

# 參數(shù):
#    name:  redis的name
#    value: 要?jiǎng)h除的值
#    num:   num=0 刪除列表中所有的指定值;
#           num=2 從前到后,刪除2個(gè);
#           num=-2 從后向前,刪除2個(gè)'''

lpop(self, name)

#移除列表的左側(cè)第一個(gè)元素,返回值則是第一個(gè)元素
print(red.lpop("name"))

lindex(self, name, index)

#根據(jù)索引獲取列表內(nèi)元素
print(red.lindex("name",1))

lrange(self, name, start, end)

#分片獲取元素
print(red.lrange("name",0,-1))

ltrim(self, name, start, end)

#移除列表內(nèi)沒有在該索引之內(nèi)的值
red.ltrim("name",0,2)

5.set類型:集合是不允許重復(fù)的列表

sadd(self, name, *values)

#給name對(duì)應(yīng)的集合中添加元素
red.sadd("name","aa")
red.sadd("name","aa","bb")

scard(self, name)

#獲取name對(duì)應(yīng)的集合中的元素個(gè)數(shù)
red.scard("name")

smembers(self, name)

#獲取name對(duì)應(yīng)的集合的所有成員
red.smembers('name')

sdiff(self, keys, *args)

#在第一個(gè)name對(duì)應(yīng)的集合中且不在其他name對(duì)應(yīng)的集合的元素集合
red.sadd("name","aa","bb")
red.sadd("name1","bb","cc")
red.sadd("name2","bb","cc","dd")

print(red.sdiff("name","name1","name2"))#輸出:{aa}

sismember(self, name, value)

#檢查value是否是name對(duì)應(yīng)的集合內(nèi)的元素

smove(self, src, dst, value)

#將某個(gè)元素從一個(gè)集合中移動(dòng)到另外一個(gè)集合

spop(self, name)

#從集合的右側(cè)移除一個(gè)元素,并將其返回

6.其他常用操作

flushdb(self,asynchronous=False)

#清空當(dāng)前db中的數(shù)據(jù),默認(rèn)是同步。若開啟異步asynchronous=True,會(huì)新起一個(gè)線程進(jìn)行清空操作,不阻塞主線程

flushall(self,asynchronous=False)

#清空所有db中的數(shù)據(jù),默認(rèn)是同步。異步同flushdb

delete(self, *names)

#根據(jù)name刪除redis中的任意數(shù)據(jù)類型

exists(self, name)

#檢查redis的name是否存在

keys(self, pattern='*')

#根據(jù)* ?等通配符匹配獲取redis的name

expire(self,name ,time)

#為某個(gè)name的設(shè)置過期時(shí)間

rename(self, src, dst)

#重命名

move(self, name, db))

# 將redis的某個(gè)name移動(dòng)到指定的db下

randomkey(self)

#隨機(jī)獲取一個(gè)redis的name(不刪除)

type(self, name)

# 獲取name對(duì)應(yīng)值的類型
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容