Redis事務簡介
概述
事務是一個業務,也可以看成是一個邏輯工作單元,是為了保證業務的完整,數據的正確而推出的一種控制機制,原則上來講,事務必須要滿足ACID四個特性(原子性,一致性,隔離性,持久性),在多個事務
在并發執行,為更好保證事務的四個特性的實現,通常會對事務加鎖,Redis為了性能,采用了樂觀鎖方式進行事務控制,它使用watch命令監視給定的key,當exec(提交事務)的時候,如果監視的key從調用watch后發生過變化,則整個事務會失敗。也可以調用watch多次監視多個key。注意watch的key是對整個連接有效的,如果連接斷開,監視和事務都會被自動清除。當然exec,discard,unwatch命令都會清除連接中的所有監視。
基本指令
redis進行事務控制時,通常是基于如下指令進行實現,例如:
multi 開啟事務
exec 提交事務
discard 取消事務
watch 監控,如果監控的值發生變化,則提交事務時會失敗
unwatch 去掉監控
Redis保證一個事務中的所有命令要么都執行,要么都不執行(原子性)。如果在發送EXEC命令前客戶端斷線了,則Redis會清空事務隊列,事務中的所有命令都不會執行。而一旦客戶端發送了EXEC命令,所有的命令就都會被執行,即使此后客戶端斷線也沒關系,因為Redis中已經記錄了所有要執行的命令。
Redis事務控制實踐
exec提交事務
例如:模擬轉賬,tony 500,jack 200,tony轉給jack100。過程如下:
127.0.0.1:6379> set tony 500
OK
127.0.0.1:6379> set jack 200
OK
127.0.0.1:6379> mget tony jack
1) "500"
2) "200"
127.0.0.1:6379> multi #開啟事務
OK
127.0.0.1:6379(TX)> decrby tony 100 #所有指令操作會進入到隊列
QUEUED
127.0.0.1:6379(TX)> incrby jack 100
QUEUED
127.0.0.1:6379(TX)> mget tony jack
QUEUED
127.0.0.1:6379(TX)> exec #提交事務
1) (integer) 400
2) (integer) 300
3) 1) "400"
2) "300"
127.0.0.1:6379> mget tony jack
1) "400"
2) "300"
127.0.0.1:6379>
如需轉載,請注明文章出處和來源網址:http://www.rs2pl.com/html/h65263.shtml