Redis事務(wù)
嚴(yán)格意義來講齿诉,redis的事務(wù)和我們理解的傳統(tǒng)數(shù)據(jù)庫(如mysql)的事務(wù)是不一樣的。
Redis 通過 MULTI、EXEC、WATCH 等命令來實現(xiàn)事務(wù)(transaction)功能懦趋。
事務(wù)提供了一種將多個命令請求打包,然后一次性疹味、按順序地執(zhí)行多個命令的機制仅叫,并且在事務(wù)執(zhí)行期間,服務(wù)器不會中斷事務(wù)而改去執(zhí)行其他客戶端的命令請求糙捺,它會將事務(wù)中的所有命令都執(zhí)行完畢诫咱,然后才去處理其他客戶端的命令請求。Redis保證一個事務(wù)中的所有命令要么都執(zhí)行洪灯,要么都不執(zhí)行坎缭,但是Redis同一個事務(wù)中如果有一條命令執(zhí)行失敗,其后的命令仍然會被執(zhí)行,不會回滾幻锁。
WATCH命令可以監(jiān)控一個或多個鍵,一旦其中有一個鍵被修改(或刪除)边臼,之后的事務(wù)就不會執(zhí)行哄尔。監(jiān)控一直持續(xù)到EXEC命令(事務(wù)中的命令是在EXEC之后才執(zhí)行的,所以在MULTI命令后可以修改WATCH監(jiān)控的鍵值)
下圖是WATCH命令示例:
由于WATCH命令的作用只是當(dāng)被監(jiān)控的鍵值被修改后阻止之后一個事務(wù)的執(zhí)行柠并,而不能保證其他客戶端不修改這一鍵值茸习,所以在一般情況下我們需要在EXEC執(zhí)行失敗后重新執(zhí)行整個函數(shù)跨晴。
參考文檔:Redis事務(wù)及WATCH