1. 程式人生 > >【Python中操作Redis】

【Python中操作Redis】

下載redis庫:pip install redis

文章目錄

基本用法

redis庫提供兩個類,RedisStrictRedis,用於實現Redis的命令.
StrictRedis用於實現大部分的官方命令,並使用官方的語法和命令.
Redis是StrictRedis的子類,用於向後相容舊版本的redis-py.

Redis連線例項是執行緒安全的,可以直接將redis連線例項設定為一個全域性變數,直接使用.

如果需要另一個Redis例項(or Redis資料庫)時,就需要重新建立redis連線例項來獲取一個新的連線.

連線redis,加上引數decode_responses=True

時,寫入的鍵值對中value為字串型別,否則為位元組型別.

基本操作

from redis import Redis

# 建立一個連線例項
conn = Redis(host='localhost', port=6379, password='', decode_responses=True)


# ========= set 與 get (String型別)=========

conn.set('name', '01')
ret01 = conn.get('name')  # 01


# ========= hset 與 hget (Hash型別)=========

info = 'info'
conn.hset(info, 'k1', 'v1') conn.hset(info, 'k2', 'v2') ret02 = conn.hget('info', 'k1') # v1 # ========= hmset 與 hgetall (Hash型別)========= conn.hmset('data', {'k1': 'v1', 'k2': 'v2'}) conn.hmset('data', {'k3': 'v3', 'k4': 'v4'}) ret03 = conn.hgetall('data') # {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'}

連線池

使用ConnectionPool來管理對於一個redis伺服器的所有連線,可避免每次連線時都要建立、釋放連線的開銷.

預設,每個Redis例項都會維護一個自己的連線池.

可以直接建立一個連線池,然後作為引數傳給Redis例項,這樣便可實現多個Redis例項共享一個連線池.

import redis

# 建立連線池
POOL = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True)

# 建立兩個Redis例項,共用一個連線池
conn01 = redis.Redis(connection_pool=POOL)
conn02 = redis.Redis(connection_pool=POOL)

conn01.set('name', 'n1')
conn02.set('name', 'n2')
# ...

print(conn01.get('name'))  # 此時的key值為:n2

基本命令

在Redis中設定值,預設不存在則建立,存在則修改.

delete(*['k1', 'k2']) 指定key刪除
flushdb () 清空當前庫中的所有key
flushall() 清空整個 Redis 伺服器的資料
·
模糊查詢
keys('k*') 查所有以’k’開頭的key

String

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

引數
·
ex 過期時間(秒),過期後值為None
px 過期時間(毫秒)
nx 如果設定為True,則只有name不存在時,當前set操作才會執行
xx 如果設定為True,則只有name存在時,當前set操作才會執行

操作
·
get(key):獲取key的值.
mset(*args, **kwargs):批量設定值(例:mset({‘k1’: ‘v1’, ‘k2’: ‘v2’}))
mget(key, *args):批量獲取值(例:mget(‘k1’, ‘k2’))

Hash

hset(name, key, value) 增加單個,不存在則建立
·
hget(name, key) 獲取單個
·
hmset(name, mapping) 批量增加,mapping為字典
·
hgetall(name) 獲取name對應hash的所有鍵值對
·
hlen(name) 獲取name對應的hash中鍵值對的個數
·
hkeys(name) 獲取name對應的hash中所有的key的值
·
hvals(name) 獲取name對應的hash中所有的value的值
·
hexists(name, key) 檢查name對應的hash是否存在當前傳入的key
·
hdel(name, *keys) 將name對應的hash中指定的key的鍵值對刪除

hscan_iter(self, name, match=None, count=None)
·
返回一個迭代器,list後型別為:[ (‘k1’, ‘v2’), (‘k2’, ‘v2’), (…)].
利用yield封裝hscan建立的生成器,實現分批去redis中獲取資料
·
引數:
match 匹配指定key,預設None表示所有的key.
count 每次分片最少獲取的個數,預設None表示採用Redis的預設分片個數.

List

lpush(name, values) 在name對應的list中左邊新增元素,沒有就新建
·
llen(name) 獲取name對應的列表長度
·
lrang(name, index1, index2) 按照index切片取出name對應列表裡的值
·
lpushx(name, value) 只能新增不能新建
·
lset(name, index, value) 給指定索引修改值
·
index(name, index) 在name對應的列表中根據索引獲取列表元素剩下的集合以及有序集合的命令.

linsert(name, where, revalue, value)
·
在name對應的列表的某一個值前或後插入一個新值.
·
引數:
name redis的name
where BEFORE或AFTER
refvalue 標杆值,即:在它前後插入資料
value 要插入的資料

lrem(name, value, num)
·
在name對應的list中刪除指定的值
·
引數:
name redis的name
value 要刪除的值
num:解釋如下
num=0時,刪除列表中所有的指定值
num=1時,從前到後,刪除左邊第1個
num=2時,從前到後,刪除2個
num=-2時,從後向前,刪除2個