Django-34 Redis-3 事务
2021-12-18 本文已影响0人
JuliusL
事务命令
1、multi
开启事务,类似mysql begin
2、命令1
3、命令2
4-1、exec
提交到数据库执行 mysql commit
4-2、discard
取消事务 mysql 'rollback'
pipeline 流水线
批量执行redis命令,减少通信IO
原理:效仿redis事务,客户端将多个命令打包,一次通信发给redis,可明显降低redis服务的请求数
注意:
1,此为客户端技术
2,如果一组命令中,一个命令需要上一个命令的执行结果才可以执行,则无法使用该技术
import redis
# 创建连接池并连接到redis
pool = redis.ConnectionPool(host='127.0.0.1',db=0,port=6379)
r = redis.Redis(connection_pool=pool)
pipe = r.pipeline()
pipe.set('fans',50)
pipe.incr('fans')
pipe.incrby('fans',100)
pipe.execute()
python 操作redis事务
Python操作事务需要依赖流水线技术
with r.pipeline(transaction=true) as pipe
pipe.multi()
pipe.incr('books')
pipe.incr('books')
values = pipe.execute()
watch-乐观锁
事务过程中,可对指定key进行监听,命令提交时,若被监听key对应的值未被修改,事务方可提交成功,否则失败
解决资源竞争的一种方式
> watch book
OK
> multi
OK
> incr books
QUEUED
> exec #事务执行失败
(nil)
watch之后,再开一个终端进入redis
> incr books #修改book值
(integer) 1