1. 程式人生 > 其它 >Redis基本操作進階篇--事務學習

Redis基本操作進階篇--事務學習

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"