Redis 事務(wù)本質(zhì):一組命令的集合颖系!一個(gè)事務(wù)中的所有命令都會(huì)被序列化,在事務(wù)的執(zhí)行過程中辩越,會(huì)按照順序執(zhí)行嘁扼!
事務(wù)的特性:一次性 順序性 排他性! 執(zhí)行一些列的命令黔攒!
-----隊(duì)列 set set set --- 執(zhí)行
所有的命令在事務(wù)中,并沒有直接被執(zhí)行亏钩!只有發(fā)起執(zhí)行命令的時(shí)候才會(huì)執(zhí)行莲绰!Exec
Redis的事務(wù):
- 開啟事務(wù)(multi)
- 命令入隊(duì)()
- 執(zhí)行事務(wù)(exec)
正常執(zhí)行事務(wù)
hadoop102:6379[15]> multi # 開啟事務(wù)
OK
# 命令入隊(duì)
hadoop102:6379[15]> set k1 v1
QUEUED
hadoop102:6379[15]> set k2 v2
QUEUED
hadoop102:6379[15]> get k2
QUEUED
hadoop102:6379[15]> set k3 v3
QUEUED
hadoop102:6379[15]> EXEC # 執(zhí)行事務(wù)
1) OK
2) OK
3) "v2"
4) OK
hadoop102:6379[15]>
放棄事務(wù)
hadoop102:6379[15]> multi # 開啟事務(wù)
OK
hadoop102:6379[15]> set k1 v1
QUEUED
hadoop102:6379[15]> set k2 v2
QUEUED
hadoop102:6379[15]> set k4 v4
QUEUED
hadoop102:6379[15]> DISCARD #取消事務(wù)
OK
hadoop102:6379[15]> get k4 # 事務(wù)隊(duì)列中命令都不會(huì)執(zhí)行
(nil)
hadoop102:6379[15]>
編譯型異常(代碼有問題蛤签!命令有錯(cuò)),事務(wù)中所有的命令都不會(huì)被執(zhí)行栅哀!
hadoop102:6379[15]> MULTI # 開啟事務(wù)
OK
hadoop102:6379[15]> set k1 v1
QUEUED
hadoop102:6379[15]> set k2 v2
QUEUED
hadoop102:6379[15]> set k3 v3
QUEUED
hadoop102:6379[15]> setset k3 # 錯(cuò)誤的命令
(error) ERR unknown command 'setset'
hadoop102:6379[15]> set k4 v4
QUEUED
hadoop102:6379[15]> set k5 v5
QUEUED
hadoop102:6379[15]> exec # 執(zhí)行事務(wù)報(bào)錯(cuò)
(error) EXECABORT Transaction discarded because of previous errors.
hadoop102:6379[15]> get k1 # 所有的命令都不會(huì)被執(zhí)行
(nil)
運(yùn)行時(shí)異常(1/0)震肮,如果事務(wù)隊(duì)列中存在語法性,那么執(zhí)行命令的時(shí)候留拾,其他命令可以正常執(zhí)行戳晌,錯(cuò)誤命令拋出異常!
hadoop102:6379[15]> set k1 "v1"
OK
hadoop102:6379[15]> MULTI
OK
hadoop102:6379[15]> incr k1 # 執(zhí)行的時(shí)候會(huì)失敗 字符串不能加1
QUEUED
hadoop102:6379[15]> set k2 v2
QUEUED
hadoop102:6379[15]> set k3 v3
QUEUED
hadoop102:6379[15]> get k3
QUEUED
hadoop102:6379[15]> exec
1) (error) ERR value is not an integer or out of range # 雖然第一條命令報(bào)錯(cuò)了 但是依然正常執(zhí)行成功了痴柔!
2) OK
3) OK
4) "v3"
hadoop102:6379[15]> get k2
"v2"
hadoop102:6379[15]> get k3
"v3"
hadoop102:6379[15]>