事務命令
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