Django-34 事務

事務命令

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章