為什麼 Redis 不支援回滾 roll back

2021-08-20 06:53:41 字數 423 閱讀 2596

以下是這種做法的優點:

redis 命令只會因為錯誤的語法而失敗(並且這些問題不能在入隊時發現),或是命令用在了錯誤型別的鍵上面:這也就是說,從實用性的角度來說,失敗的命令是由程式設計錯誤造成的,而這些錯誤應該在開發的過程中被發現,而不應該出現在生產環境中。

因為不需要對回滾進行支援,所以 redis 的內部可以保持簡單且快速。

有種觀點認為 redis 處理事務的做法會產生 bug , 然而需要注意的是, 在通常情況下, 回滾並不能解決程式設計錯誤帶來的問題。 舉個例子, 如果你本來想通過 incr 命令將鍵的值加上 1 , 卻不小心加上了 2 , 又或者對錯誤型別的鍵執行了 incr , 回滾是沒有辦法處理這些情況的。

鑑於沒有任何機制能避免程式設計師自己造成的錯誤, 並且這類錯誤通常不會在生產環境中出現, 所以 redis 選擇了更簡單、更快速的無回滾方式來處理事務。

為什麼Redis事務不支援回滾

redis命令在事務中可能會執行失敗,但是redis事務不會回滾,而是繼續會執行餘下的命令。如果您有乙個關係型資料庫的知識,這對您來說可能會感到奇怪,因為關係型資料在這種情況下都是會回滾的。redis這樣做,主要是因為 只有當發生語法錯誤 這個問題在命令佇列時無法檢測到 了,redis命令才會執行失...

為什麼模板不支援分離編譯?

在c 中,為了乙個專案的規範化我們通常把 歸類為三類 宣告檔案 實現檔案 測試檔案。比如,我們要實現乙個順序表,那麼規範化就是建立3個檔案 seqlist.h 順序表相關宣告 seqlist.cpp 順序表相關實現 test.cpp 順序表測試檔案 那麼普通順序表這樣寫一點問題都沒有,用模板實現成這...

為什麼模板不支援分離編譯

在c 中,為了乙個專案的規範,我們通常把 歸為三類 宣告檔案 實現檔案 測試檔案.比如,我要用c 實現乙個鍊錶,那麼就會建立這3個檔案 linklist.h 鍊錶的相關宣告 linklist.cpp 鍊錶的實現 test.cpp 鍊錶測試 本文忽略 那麼問題來了,普通鍊錶這樣寫起來一點問題都沒有 如...