python redis模塊詳解


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

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

簡單介紹下redis,一個高性能key-value的存儲系統,支持存儲的類型有string、list、set、zset和hash。在處理大規模數據讀寫的場景下運用比較多。

 

1.連接Redis數據庫:

1)直接連接

import redis

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

 

2)連接池連接

連接池的原理是, 通過預先創建多個連接, 當進行redis操作時, 直接獲取已經創建的連接進行操作, 而且操作完成后, 不會釋放, 用於后續的其他redis操作,這樣就達到了避免頻繁的redis連接創建和釋放的目的, 從而提高性能。redis模塊采用ConnectionPool來管理對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類型存取:

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

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

setex(self, name, value, time) #設置過期時間(秒) psetex(self, name, time_ms, value) #設置過期時間(豪秒)

mset(self, *args, **kwargs)

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

get(self, name)

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

mget(self, keys, *args)

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

strlen(self, name)

#返回key對應值的字節長度(一個漢字3個字節)
red.strlen("key")

append(name, value)

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

 

3.Hash類型:一個name對應一個dic字典來存儲。

hset(self, name, key, value)

#name對應的hash中設置一個鍵值對(不存在,則創建,否則,修改)
red.hset("name","key","value")

hget(self, name, key)

red.hset("name","key","value")
#在name對應的hash中根據key獲取value
print(red.hget("name","key"))#輸出:'value'

hgetall(self, name)

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

hmset(self, name, mapping)

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

hmget(self, name, keys, *args)

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

hlen(self, name)

#獲取hash鍵值對的個數
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對應的hash是否存在當前傳入的key
print(red.hexists("name","key1"))#輸出:Ture

hdel(self, name, *keys)

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

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

#與hash中key對應的值相加,不存在則創建key=amount(amount為整數)
print(red.hincrby("name","key",amount=10))#返回:10

 

4.list類型:一個name對應一個列表存儲。

lpush(self, name, *values)

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

rpush(self, name, *values)

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

lpushx(self, name, *values)

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

rpushx(self, name, *values)

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

 llen(self, name)

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

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

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

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

lset(self, name, index, value)

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

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

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

# 參數:
#    name:  redis的name
#    value: 要刪除的值
#    num:   num=0 刪除列表中所有的指定值;
#           num=2 從前到后,刪除2個;
#           num=-2 從后向前,刪除2個'''

lpop(self, name)

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

lindex(self, name, index)

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

lrange(self, name, start, end)

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

ltrim(self, name, start, end)

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

 

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

sadd(self, name, *values)

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

scard(self, name)

#獲取name對應的集合中的元素個數
red.scard("name")

smembers(self, name)

#獲取name對應的集合的所有成員
red.smembers('name')

sdiff(self, keys, *args)

#在第一個name對應的集合中且不在其他name對應的集合的元素集合
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對應的集合內的元素

smove(self, src, dst, value)

#將某個元素從一個集合中移動到另外一個集合

spop(self, name)

#從集合的右側移除一個元素,並將其返回

 

6.其他常用操作

flushdb(self,asynchronous=False)

#清空當前db中的數據,默認是同步。若開啟異步asynchronous=True,會新起一個線程進行清空操作,不阻塞主線程

flushall(self,asynchronous=False)

#清空所有db中的數據,默認是同步。異步同flushdb

delete(self, *names)

#根據name刪除redis中的任意數據類型

exists(self, name)

#檢查redis的name是否存在

keys(self, pattern='*')

#根據* ?等通配符匹配獲取redis的name

expire(self,name ,time)

#為某個name的設置過期時間

rename(self, src, dst)

#重命名

move(self, name, db))

# 將redis的某個name移動到指定的db下

randomkey(self)

#隨機獲取一個redis的name(不刪除)

type(self, name)

# 獲取name對應值的類型

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM