安裝的Python版本 3.6.1redis
redis安裝的2.8數據庫
安裝redis模塊服務器
pip install redis
簡單使用網絡
redis-test.py性能
import redis r=redis.Redis(host='127.0.0.1',port=6609,db=0) r.set('name','baby') print(r.get('name')) print(r.dbsize())
使用connection pool來管理對一個redis server的全部鏈接,避免每次創建、釋放鏈接的開銷。spa
默認,每一個Redis實例都會維護一個本身的鏈接池。code
能夠直接創建一個鏈接池,而後做爲參數 Redis,這樣就能夠實現多個Redis實例共享一個鏈接池server
使用鏈接池對象
import redis pool = redis.ConnectionPool(host='127.0.0.1',port=6609) r = redis.Redis(connection_pool=pool) r.set('name1','lili') print(r.get('name1'))
應用:頁面點擊數blog
須要對一系列頁面記錄點擊次數,若是使用關係數據庫來存儲點擊,可能存在大量的行級鎖爭用
(1)當redis服務器啓動時,能夠從關係數據庫讀入點擊數的初始值
import redis r=redis.Redis(host='127.0.0.1',port=6609,db=0) r.set('visits:100',999)
(2)有人訪問頁面時
r.incr('visits:100')
(3)獲取頁面點擊數
r.get('visits:100')
Pipeline 是 StrictRedis 類的子類,支持在一個請求裏發送緩衝的多個命令。經過減小客戶端和服務器之間往來的數據包,能夠大大提升命令組的性能
簡單使用
>>>import redis >>>r=redis.Redis(host='127.0.0.1',port=6609,db=0) >>> r.set('name', 'baby') >>> pipe = r.pipeline() >>> pipe.set('birthday', '2010') >>> pipe.get('name') >>> pipe.execute()
爲了方便使用,全部緩衝到 pipeline 的命令返回 pipeline 對象自己
調用能夠鏈接起來
>>> pipe.set('name', 'baby').set('birthday', '2010').get('name').execute()
pipeline 也能夠保證緩衝的命令組作爲一個原子操做
要使用命令緩衝,但禁止pipeline 的原子操做屬性,關掉 transaction
pipe = r.pipeline(transaction=False)
WATCH 命令提供了在開始事務前監視一個或多個鍵
這些鍵中的任何一個在執行事務前發生改變,整個事務就會被取消並拋出 WatchError 異常
import redis import time r=redis.Redis(host='127.0.0.1',port=6609,db=0) sellerid = 101 itemid = 101 price = 50 print(time.time()) def list_item(r,itemid,sellerid,price): inventory = "inventory:%s"%sellerid item = "%s.%s"%(itemid,sellerid) end = time.time()+5 pipe = r.pipeline() while time.time()<end: try: pipe.watch(inventory) if not pipe.sismember(inventory,itemid): pipe.unwatch() return None pipe.multi() pipe.zadd("market:",item,price) pipe.srem(inventory,itemid) pipe.execute() return True except redis.exceptions.WatchError: pass return False list_item(r,itemid,sellerid,price)
redis只會在數據已經被其餘客戶端搶先修改了的狀況下,通知執行了WATCH命令的客戶端,即--樂觀鎖
而關係型數據庫執行的加鎖操做爲悲觀鎖,這種方式下持有鎖的客戶端運行越慢,等待解鎖的客戶端被阻塞的時間越長
1 |
|
若是在watch後值被修改,在執行pipe.execute()的時候會報異常WatchError: Watched variable changed
redis只會在本身的事務執行失敗時重試
流水線:一次性發送多個命令,而後等待全部回覆出現。能夠經過減小客戶端與redis服務器之間的網絡通訊次數來提高redis在執行多個命令時的性能