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)