【Python redis】

"下載:pip install redis
@html


基本用法

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

Redis鏈接實例是線程安全的,能夠直接將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服務器的全部鏈接,可避免每次鏈接時都要創建、釋放鏈接的開銷.app

默認,每一個Redis實例都會維護一個本身的鏈接池.ide

能夠直接創建一個鏈接池,而後做爲參數傳給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中設置值,默認不存在則建立,存在則修改.code

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'))

詳見runoob.

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個

set

sadd('k', 'v') 將一個活多個'v'添加到'k'中,'k'不存在時自動建立,'v'存在時忽略
·
scard('k') 統計'k'中有多少個成員
·
sinter('k') 查'k'中的全部成員
·
smembers('k') 查'k'中的全部成員
·
sismember('k', 'v') 判斷'v'是不是'k'中的成員

sismember "

相關文章
相關標籤/搜索