redis事務具有原子性和持久性嗎?
迷茫
迷茫 2017-04-24 09:12:18
0
2
769

redis事務具有原子性和持久性嗎?

redis設計與實現 書中說:

Redis的事務總是具有ACID中的原子性、一致性和隔離性,當伺服器運行在AOF
持久化模式下,並且appendfsync選項的值為always時,事務也具有耐久性。

可看網路資料,又說redis事務不滿足原子性和持久性:

  • 在redis事務中如果有某一條命令執行失敗,其後的命令仍然會被繼續執行,並不會自動回滾;

  • 在AOF的「總是 SYNC 」模式下,事務的每個指令在執行成功之後,都會立即呼叫fsync或fdatasync將事務資料寫入到AOF檔。
    但是,這種保存是由後台線程進行的,主線程不會阻塞直到保存成功,所以從命令執行成功到資料保存到硬碟之間,還是有一段非常小的間隔,所以這種模式下的事務也是不持久的。

求解答~~

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(2)
迷茫

這個主要是對redis原子性有疑問,現在已經查證,redis是不確保原子性的,事務中命令執行失敗時,是不會回滾的。

It's important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.

PHPzhong

首先redis是單線程的,所以其實是沒有事務這個概念的,除非使用mutil手動的將一組命令封裝到一起作為一個整體來執行,具體如果這個整體有一條指令失敗會不會回滾可以自己做個測試。
單線程所以每個命令都是原子性的,一致性和隔離性是針對事務來說的,redis的事務是通過將一組命令封裝到一起執行所以是隔離性的,因為阻塞了其他命令的執行,至於一致性,如果上面你做的測試會回滾那麼就是一致性的,不會滾那就不是一致性的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!