ttl 若是時間過時,新版的將-1,改爲-2了。python
from flask import Flask from redis import StrictRedis app = Flask(__name__) # 1: 建立redis客戶端鏈接對象 redis_cli = StrictRedis(host="192.168.44.128", port=6381, decode_responses=True) # 2:數據增刪改查 redis_cli.set("name:7", "curry", 3600) print(redis_cli.get("name:7")) # 3: Hash類型---存儲對象 user_dict = {"name": "kobe", "age": 42, "info": "lakers"} redis_cli.hmset("user:8", user_dict) print(redis_cli.hmget("user:8", ["name", "age", "info"])) if __name__ == '__main__': app.run(host='0.0.0.0', debug=True, port=8000)
事務在代碼中如何實現?redis
from redis import StrictRedis # 1: 建立redis,客戶端對象 redis_cli = StrictRedis(decode_responses=True) # 2: 建立redis管道對象 pipeline = redis_cli.pipeline() # 3: 經過管道對象操做數據庫 a = pipeline.set("name1", "張三") b = pipeline.get("name1") # 4: 執行管道的命令 c = pipeline.execute() print(a, b, c)
案例:
代碼實現:數據庫
from redis import StrictRedis, WatchError from flask import Flask app = Flask(__name__) # 1: 建立redis客戶端對象 redis_cli = StrictRedis(decode_responses=True) # 2: 建立redis管道對象 pipeline = redis_cli.pipeline() # 3: 使用watch函數觀察庫存 pipeline.set("count", 100) pipeline.execute() key = "count" while True: pipeline.watch(key) # 4:一旦使用watch函數事務不會自動開啓,手動開啓事務 # 5: 讀取庫存,判斷庫存值 count = redis_cli.get(key) if int(count)> 0: # 6: 減庫存 pipeline.multi() pipeline.decr(key) print("下單成功") # 7:提交 pipeline.execute() else: print("庫存不足") break # 7: 移除觀察 pipeline.reset() if __name__ == '__main__': app.run(host='0.0.0.0', debug=True, port=8000)
from redis import StrictRedis # 1: 建立redis客戶端對象 redis_cli = StrictRedis(decode_responses=True) key = "order:Lock" while True: # 2: 建立悲觀鎖 lock = redis_cli.setnx(key, 1) # 3: 防止忘記刪除鎖資源,給鎖資源添加過時時長。---防止出現死鎖。 redis_cli.expire(key, 5) # 4: 獲取庫存 count = redis_cli.get("count") # 5: 爭奪到鎖資源的容許redis客戶端對象進行數據庫增刪改查 if lock: if int(count) > 0: redis_cli.decr('count') print("下單成功") else: print("庫存不足") break # 6: 刪除鎖資源---防止死鎖 redis_cli.delete(key)
from redis import StrictRedis # 1: 建立redis,客戶端對象 redis_cli = StrictRedis(decode_responses=True) # 2:建立redis管道對象---非事務型管道 pipline = redis_cli.pipeline(transaction=False) # 3:經過管道對象操做數據庫 a = pipline.set("name", "王高") b = pipline.get("name") c = pipline.execute() print(a, b, c)