Redis事務分爲3個指令:
multi表示事務開始
exec表示事務執行。指令在exec之前不執行,統一緩存在服務器的一個事務隊列中,當執行exec指令後,纔開執行整個事務隊列,執行完畢後一次性返回所有指令的運行結果。
discard表示丟棄事務緩存隊列中的所有指令
由於Redis是單線程,這就意味着所有事務必須是串行執行,因此當前正在執行的事物也不會被其他事物打斷,因此Redis事務沒有原子性這個說法,只有隔離性,因爲是串行運行,也就不存在同一條記錄被多個事務修改,也就沒有原子性這個說法,這裏只有事務與事務之間的隔離性。
假如一個事務裏面有5條指令,如果其中一條執行失敗,其剩餘指令還會繼續執行,這裏事務與事務之間隔離,事務內部指令之間也是隔離。
這裏有個watch鎖,研究不多,只是有個規定:watch鎖禁止在multi和exec之間執行watch 指令,而必須在multi之前進行wtach關鍵變量。