Redis基本操作進階篇--事務學習
阿新 • • 發佈:2021-12-27
Redis中的事務(transaction)是一組命令的集合。一個事務中的命令要麼全部執行,要麼都不執行。Redis的事務沒有關係資料庫事務提供的回滾(rollback)功能。
事務
概述
Redis中的事務(transaction)是一組命令的集合。一個事務中的命令要麼全部執行,要麼都不執行。Redis的事務沒有關係資料庫事務提供的回滾(rollback)功能。
Redis通過MULTI
標記一個事務塊的開始。事務塊內的多條命令會按照先後順序被放進一個佇列(queued)當中,最後由EXEC
命令原子性(atomic)地執行。
Redis保證一個事務中的所有命令要麼都執行,要麼都不執行。如果EXEC
命令之前出現錯誤,則Redis會清空事務佇列,事務中的所有命令都不執行。
此外,Redis的事務還能保證一個事務內的命令依次執行而不被其他命令插入。
事務基礎語法
multi # 開啟事務 set name kang # 使命令進入等待執行的事務佇列中 set age 18 # 使命令進入等待執行的事務佇列中 exec # 按順序執行事務塊內所有的命令
錯誤處理
語法錯誤
Redis2.6.5之前的版本會忽略有語法錯誤的命令,然後執行事務中其它語法正確的命令。就之後版本而言,只要有一個命令有語法錯誤,執行EXEC
命令後,Redis就會直接返回錯誤,不執行任何命令。
示例如下:
multi set key name kang key * # 語法錯誤,返回值:(error) ERR unknown command `key`, with args beginning with: `*`, exec # 返回值:(error) EXECABORT Transaction discarded because of previous errors.
執行錯誤
執行錯誤指的是在命令執行中出現的錯誤,如果Redis中出現了執行錯誤,事務中其它正確的命令會繼續執行。
示例如下:
multi
set name kang
sadd name kang
set age 18
exec
# 返回值:
# 1) OK
# 2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
# 3) OK
WATCH命令
WATCH
命令用於監視一個或多個鍵 ,如果在事務執行之前監視的鍵被其他命令修改,那麼事務將被打斷。
set name kang watch name set name Kang multi set name kang exec # 返回值:(nil) get name # 返回值:"Kang"