一、redis連接
redis提供兩個類Redis和StrictRedis用於實現Redis的命令,StrictRedis用於實現大部分官方的命令,並使用官方的語法和命令,Redis是StrictRedis的子類,用於向后兼容舊版本的redis-py。
redis連接實例是線程安全的,可以直接將redis連接實例設置為一個全局變量,直接使用。如果需要另一個Redis實例(or Redis數據庫)時,就需要重新創建redis連接實例來獲取一個新的連接。
安裝redis
pip install redis
連接redis,加上decode_responses=True,寫入的鍵值對中的value為str類型,不加這個參數寫入的則為字節類型。
二、連接池連接
redis-py使用connection pool來管理對一個redis server的所有連接,避免每次建立、釋放連接的開銷。默認,每個Redis實例都會維護一個自己的連接池。可以直接建立一個連接池,然后作為參數Redis,這樣就可以實現多個Redis實例共享一個連接池
連接池:redis_pool.py
import redis
from redis_pool import POOl
conn = redis.Redis(connection_pool=POOl)
conn.set('name', 'LinWOW')
print(conn.get('name'))
三、redis-py 操作redis
python操作redis的命令和命令行幾乎一致,除了del,因為和關鍵字重疊,所以用delete
1、字符串類型操作:
set----鍵key
con.set('key','values')
get---獲取數值
con.get('com')
append --- 追加
con.append('keys','values')
delete---刪除
con.delete('keys')
2、List類型:
rpush 、lpush----添加數據
con.rpush('keys','values')
con.lpush('keys','values')
lrange---查看數據
con.lrange('list',0,11)
lset---修改數據
con.lset('list_F',1,'Fyn')---返回布爾值
rpop ---- 隨機刪除一個數據
con.rpop('keys')
lrem ---- 指定刪除一個數據時
con.lrem('list_f',0,'okl')
3、Hash類型
hmget --- 添加多條數據,也可插入單條數據
以字典的形式插入
con.hmste('keys',{'name':''age})#插入結果返回布爾值
hget , hgetall , hvals,hkeys查看數據
con.hget('ok','name')
con.hgetall('ok')#結果返回字典
con.hvals('ok')#獲取所有的鍵值
con.hkeys('ok')#獲取所有的鍵
hdel 、 del----刪除某個字段,刪除整個hash
con.hdel('ok',age)#指定刪除某個字段 ,成功的話返回1,否則返回0
con.del('ok')#刪除整個hash
4、set
sadd---添加數據
con.sadd('mk','oi'.'Hwelo')
smembers ---- 查看所有數據
con.smembers('mk')
spop---隨機刪除一個元素
con.spop('con.spop('mk')')
srem--- 指定刪除某個元素
con.srem('mk','oi')
5、sorted set
zadd---添加數據
con.zadd('set_f',{'name':1.1,'age':2,'sex':3})
zrange ---- 查詢數據
con.zrange('set_f',0,11)
zrem ---指定刪除某個元素
con.zrem('set_f','age')
四、redis-py管道操作 piplines
管道是redis的子類,它支持在一個請求中款沖多個命令到服務器
管道使redis的讀寫速度更加的快速。秒級取值1000+的數據。
並且使用pipline實現一次請求指定多個命令,並且默認情況下一次pipline 是原子性操作。
#1、創建一個管道
pipe = con.pipeline()
#緩沖多個命令
pipe.keys('*')
pipe.set('name','Mkl')
#執行命令
res = pipe.execute()#返回列表
print(res[0])
print(res[1])
管道的命令可以寫在一起,如:
pipe.set('hello', 'redis').sadd('faz', 'baz').incr('num').execute()
print(r.get("name"))
print(r.get("role"))
print(r.get("num"))