Redis之事務處理

stonebox1122發表於2017-08-11
事務處理。
127.0.0.1:6379> get age
"30"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 10
QUEUED
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
127.0.0.1:6379> get age
"20"


如何取消一個事務。
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 30
QUEUED
127.0.0.1:6379> set age 40
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get age
"20"


樂觀鎖複雜事務控制。
redis樂觀鎖例項:假設有一個age的key,開2個session來對age進行賦值操作。
第一步:session1
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> watch age
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379>

第二步:session2
127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> get age
"30"
127.0.0.1:6379>

第三步:session1
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get age
"30"

watch命令會監視給定的key,當exec時候如果監視的key從呼叫watch後發生過變化,則整個事務會失敗,也可以呼叫watch多次監視多個key。這樣就可以對指定的key加樂觀鎖了。注意watch的key是對整個連線有效的,事務也一樣。如果連線斷開,監視和事務都會被自動清除。當然除了exec,discard,unwatch命令都會清除連線中的所有監視。

事務回滾:如果事務中的一個命令失敗了,並不回滾其他命令。
127.0.0.1:6379> get age
"30"
127.0.0.1:6379> get name
"master"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incr age
QUEUED
127.0.0.1:6379> incr name
QUEUED
127.0.0.1:6379> exec
1) (integer) 31
2) (error) ERR value is not an integer or out of range
127.0.0.1:6379> get age
"31"
127.0.0.1:6379> get name
"master"

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2143383/,如需轉載,請註明出處,否則將追究法律責任。

相關文章