新聞中心

- 開(kāi)始事務(wù)
- 命令入隊(duì)
- 執(zhí)行事務(wù)
Redis事務(wù)特性
Redis 事務(wù)具有兩個(gè)重要特性:
1) 單獨(dú)的隔離操作
事務(wù)中的所有命令都會(huì)被序列化,它們將按照順序執(zhí)行,并且在執(zhí)行過(guò)的程中,不會(huì)被其他客戶端發(fā)送來(lái)的命令打斷。
2) 不保證原子性
在 Redis 的事務(wù)中,如果存在命令執(zhí)行失敗的情況,那么其他命令依然會(huì)被執(zhí)行,不支持事務(wù)回滾機(jī)制。
注意:Redis 不支持事務(wù)回滾,原因在于 Redis 是一款基于內(nèi)存的存儲(chǔ)系統(tǒng),其內(nèi)部結(jié)構(gòu)比較簡(jiǎn)單,若支持回滾機(jī)制,則讓其變得冗余,并且損耗性能,這與 Redis 簡(jiǎn)單、快速的理念不相符合。
Redis事務(wù)命令
| 命令 | 說(shuō)明 |
|---|---|
| MULTI | 開(kāi)啟一個(gè)事務(wù) |
| EXEC | 執(zhí)行事務(wù)中的所有命令 |
| WATCH key [key ...] | 在開(kāi)啟事務(wù)之前用來(lái)監(jiān)視一個(gè)或多個(gè)key 。如果事務(wù)執(zhí)行時(shí)這些 key 被改動(dòng)過(guò),那么事務(wù)將被打斷。 |
| DISCARD | 取消事務(wù)。 |
| UNWATCH | 取消 WATCH 命令對(duì) key 的監(jiān)控。 |
Redis事務(wù)應(yīng)用
您可以把事務(wù)可以理解為一個(gè)批量執(zhí)行 Redis 命令的腳本,但這個(gè)操作并非原子性操作,也就是說(shuō),如果中間某條命令執(zhí)行失敗,并不會(huì)導(dǎo)致前面已執(zhí)行命令的回滾,同時(shí)不會(huì)中斷后續(xù)命令的執(zhí)行(不包含監(jiān)聽(tīng) key 的情況)。示例如下:
開(kāi)啟事務(wù) 127.0.0.1:6379> MULTI OK 127.0.0.1:6379> INCR 1 QUEUED #命令入隊(duì)成功 127.0.0.1:6379> SET num 10 QUEUED #批量執(zhí)行命令 127.0.0.1:6379> EXEC 1) (integer) 1 2) OK
若您在事務(wù)開(kāi)啟之前監(jiān)聽(tīng)了某個(gè) key,那么您不應(yīng)該在事務(wù)中嘗試修改它,否則會(huì)導(dǎo)致事務(wù)中斷。
開(kāi)啟事務(wù)之前設(shè)置key/value,并監(jiān)聽(tīng) 127.0.0.1:6379> set www.biancheng.net hello OK 127.0.0.1:6379> WATCH www.biancheng.net OK 127.0.0.1:6379> get www.biancheng.net "hello" #開(kāi)啟事務(wù) 127.0.0.1:6379> MULTI OK #更改key的value值 127.0.0.1:6379> set www.biancheng.net HELLO QUEUED 127.0.0.1:6379> GET www.biancheng.net QUEUED #命令執(zhí)行失敗 127.0.0.1:6379> EXEC (error) EXECABORT Transaction discarded because of previous errors. #取消監(jiān)聽(tīng)key 127.0.0.1:6379> UNWATCH OK
在線練習(xí)工具:https://try.redis.io/
查看更多 Redis 命令:https://redis.io/commands
新聞名稱:RedisTransaction事務(wù)
網(wǎng)頁(yè)鏈接:http://www.dlmjj.cn/article/djiecii.html


咨詢
建站咨詢
