回覆列表
-
1 # 網路圈
-
2 # 六月的魚
redis是nosql,key-value資料庫,但是儲存的資料key-value鍵值對,一個key對應一個value,儲存成功了就是成功了,失敗了就是失敗了,為什麼會有事務;如果有事務,請放棄redis,他不適合此類業務場景。可以把多個值作為一個value來存。
-
3 # 泡泡研究筆記
Redis事務實現
MULTI、EXEC、DISCARD、WATCH命令是Redis實現事務功能的基礎。它允許多個命令在同一步原子性地實現。它包含兩個特性:1、所有的命令都是有序執行的。2、所有的命令要麼都執行,要麼都不執行。
當命令本身存在語法錯時,事務不會被執行。當命令執行失敗(如key儲存資料型別與命令對應資料型別不一致)時,事務的其餘命令仍會執行。
Redis不支援事務回滾的原因Redis不支援事務資料回滾的原因有兩點:
1、Redis命令僅會在語法錯誤和資料型別不一致的情況下失敗。這兩種情況都是編碼錯誤,應能在開發階段發現。
2、Redis核心簡單且快速,所以不支援回滾。
Redis作為主流的NoSQL,幾乎成了各大中小型專案技術選型的標配,而我們通常也只是將Redis作為快取來使用。很少有人知道Redis也有“事務”的概念。
Redis事務支援並不完整雖說Redis有事務概念,但是它相對於關係型資料庫的事務而言,事務實現的並不完全。Redis中的事務並不是嚴格意義的事務,因為無法保證ACID(原子性、一致性、隔離性、永續性)特性。
Redis中的事務僅是簡單的將一系列命令封裝在一起執行,事務只能取消,而不能進行回滾操作!事務中涉及的多條命令中的一條出現錯誤,並不影響其它命令的正常執行。
Redis事務為什麼不支援回滾?Redis事務之所以不支援回滾操作是因為Redis中的事務並不是關係型資料庫中所說的事務。Redis事務靠的是命令佇列實現的,Redis中的命令只有在語法錯誤時才會執行失敗,而命令若存在語法錯誤也無法進入事務佇列中,所以可以理解為Redis中的命令不會執行失敗,因此不需要回滾。
綜上,Redis事務並不是嚴格意義上的事務,所以在實際專案中不建議使用Redis事務,沒有必要。