django

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

上一篇下一篇

猜你喜欢

热点阅读