三.redis事務之watch
首先要了解redis事務中watch的作用,watch命令可以監控一個或多個鍵,一旦其中有一個鍵被修改(或刪除),之后的事務就不會執行。監控一直持續到exec命令(事務中的命令是在exec之后才執行的,所以在multi命令后可以修改watch監控的鍵值)。假設我們通過watch命令在事務執行之前監控了多個Keys,倘若在watch之后有任何Key的值發生了變化,exec命令執行的事務都將被放棄,同時返回Null multi-bulk應答以通知調用者事務執行失敗。
利用watch實現incr
具體做法如下:
WATCH mykey
val = GET mykey val = val + 1 MULTI SET mykey $val EXEC
和此前代碼不同的是,新代碼在獲取mykey的值之前先通過WATCH命令監控了該鍵,此后又將set命令包圍在事務中,這樣就可以有效的保證每個連接在執行EXEC之前,如果當前連接獲取的mykey的值被其它連接的客戶端修改,那么當前連接的EXEC命令將執行失敗。這樣調用者在判斷返回值后就可以獲悉val是否被重新設置成功。
