在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

剖析!Redis事務實現原理

張康康 ? 2019-07-29 18:27 ? 次閱讀

作者 | Video++極鏈科后端Team劉聰

整理 | 包包

所謂事務(Transaction) ,是指作為單個邏輯工作單元執行的一系列操作。事務必須滿足ACID原則(原子性、一致性、隔離性和持久性)。簡單來說事務其實就是打包一組操作(或者命令)作為一個整體,在事務處理時將順序執行這些操作,并返回結果,如果其中任何一個環節出錯,所有的操作將被回滾。

在Redis中實現事務主要依靠以下幾個命令來實現:

剖析!Redis事務實現原理


Redis事務從開始到結束通常會通過三個階段:

1.事務開始

2.命令入隊

3.事務執行

以下是一個最簡單的Redis事務流程:

剖析!Redis事務實現原理


第一步跟其他的關系型數據庫類似,也是需要開啟一個事務,在Redis中的命令如下:

剖析!Redis事務實現原理


Redis中使用MULTI命令標記事務的開始,可以理解為在傳統關系型數據庫中的BEGIN TRANCATION語句,Redis將執行該命令的客戶端從非事務狀態切換成事務狀態,這一切換是通過在客戶端狀態的flags屬性中打開REDIS_MULTI標識完成, 我們看下Redis中對應部分的源碼實現:

剖析!Redis事務實現原理


在打開事務標識的客戶端里,這些命令都會被暫存到一個命令隊列里,不會因為用戶會的輸入而立即執行。

第二步就是執行事務內路基,即真正的業務邏輯:

剖析!Redis事務實現原理


最后一個階段是提交事務(或者回滾事務):

剖析!Redis事務實現原理


這兩個命令可被視為等同于關系型數據庫中的COMMIT/ROLLBACK語句。

這里需要注意的是,在客戶端打開了事務標識后,只有命令:EXEC,DISCARD,WATCH,MULTI命令會被立即執行,其它命令服務器不會立即執行,而是將這些命令放入到一個事務隊列里面,然后向客戶端返回一個QUEUED回復 ;Redis客戶端有自己的事務狀態,這個狀態保存在客戶端狀態mstate屬性中,mstate的結構體類型是multiState,我們看下multiState的定義:

剖析!Redis事務實現原理


我們再看下結構體類型multiCmd的結構:

剖析!Redis事務實現原理


事務隊列以先進先出的保存方法,較先入隊的命令會被放到數組的前面,而較后入隊的命令則會被放到數組的后面。

當開啟事務標識的客戶端發送EXEC命令的時候,服務器就會執行,客戶端對應的事務隊列里的命令,我們來看下EXEC 的實現細節:

剖析!Redis事務實現原理


最后我們再回顧一下事務本身的特性, 在傳統關系型數據庫中的事務必須依靠ACID來保證事務的可靠性和安全性,在Redis中事務總是具有一致性(Consistency)和隔離性(Isolation),并且當Redis運行在某種特定的持久化模式下,事務也具有耐久性(Durability); 但是并不總是能夠保證原子性(Atomicity),在正常狀態下一個事務的所有命令是能按照原子性的原則執行的,但是執行的中途遇到錯誤,不會回滾,而是繼續執行后續命令, 如下:

剖析!Redis事務實現原理


如果在set k2 v2處失敗,set k1已成功不會回滾,set k3還會繼續執行;Redis的事務和傳統的關系型數據庫事務的最大區別在于,Redis不支持事務的回滾機制,即使事務隊列中的某個命令在執行期間出現錯誤,整個事務也會繼續執行下去,直到將事務隊列中的所有命令都執行完畢為止,我們看下面的例子:

剖析!Redis事務實現原理


Redis的作者在事務功能的文檔中解釋說,不支持事務回滾是因為這種復雜的功能和Redis追求的簡單高效的設計主旨不符合,并且他認為,Redis事務的執行時,錯誤通常都是編程錯誤造成的,這種錯誤通常只會出現在開發環境中,而很少會在實際的生產環境中出現,所以他認為沒有必要為Redis開發事務回滾功能。所以我們在討論Redis事務回滾的時候,一定要區分命令發生錯誤的時候。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    華為云 Flexus X 輕松實現 Redis 一主多從高效部署

    ,Flexus?X 預裝 Redis 加速鏡像,簡化了 Redis 的安裝和配置流程,降低了技術門檻,使開發者能夠更專注于業務邏輯的實現。 ????????本文將詳細介紹如何在華為云 Flexus?X 上
    的頭像 發表于 12-27 13:45 ?62次閱讀
    華為云 Flexus X 輕松<b class='flag-5'>實現</b> <b class='flag-5'>Redis</b> 一主多從高效部署

    Redis緩存與Memcached的比較

    Redis和Memcached都是廣泛使用的內存數據存儲系統,它們主要用于提高應用程序的性能,通過減少對數據庫的直接訪問來加速數據檢索。以下是對Redis和Memcached的比較,涵蓋了它們的一些
    的頭像 發表于 12-18 09:33 ?146次閱讀

    nginx+lua+redis實現灰度發布

    作者:馬仁喜 前言: 授人以魚不如授人以漁 .先學會用,在學原理,在學創造,可能一輩子用不到這種能力,但是不能不具備這種能力。這篇文章主要是沉淀使用nginx+lua+redis實現灰度,當我們具備
    的頭像 發表于 12-17 10:01 ?61次閱讀

    全新NVIDIA NIM微服務實現突破性進展

    全新 NVIDIA NIM 微服務實現突破性進展,可助力氣象技術公司開發和部署 AI 模型,實現對降雪、結冰和冰雹的預測。
    的頭像 發表于 11-21 10:07 ?209次閱讀

    Spring事務實現原理

    這些操作。 spring事務有編程式事務和聲明式事務兩種實現方式。編程式事務是通過編寫代碼來管理事務
    的頭像 發表于 11-08 10:10 ?824次閱讀
    Spring<b class='flag-5'>事務實現</b>原理

    恒訊科技分析:云數據庫rds和redis區別是什么如何選擇?

    結構化數據,使用SQL作為查詢語言,支持ACID事務和多種復雜查詢操作。而Redis是一個基于內存的非關系型數據庫,采用鍵值對模型存儲數據,支持豐富的數據結構如字符串、列表、集合、哈希表等。 2、性能:Redis以其超快的速度而
    的頭像 發表于 08-19 15:31 ?394次閱讀

    Redis 開源協議調整,我們怎么辦?

    2 024 年 3 月 20 日, Redis 官方宣布,從 Redis 7.4 版本開始,Redis 將獲得源可用許可證 ( RSALv2 ) 和服務器端公共許可證 ( SSPLv1 ) 的雙重
    的頭像 發表于 05-09 22:59 ?431次閱讀
    <b class='flag-5'>Redis</b> 開源協議調整,我們怎么辦?

    Redis開源版與Redis企業版,怎么選用?

    點擊“藍字”關注我們數以千計的企業和數以百萬計的開發人員Redis開源版來構建應用程序。但隨著用戶數量、數據量和地區性的增加,成本、可擴展性、運營和可用性等問題也隨之而來。Redis企業版
    的頭像 發表于 04-04 08:04 ?1070次閱讀
    <b class='flag-5'>Redis</b>開源版與<b class='flag-5'>Redis</b>企業版,怎么選用?

    GaussDB(for Redis) 特性揭秘:大 key 治理

    ? 從 DBA 的視角看,大 Key 無疑是引起 Redis 線上問題的常見原因。為了解決大 Key 隱患,業務首先要遵守合理的開發規范,減少大 Key 的產生和訪問依賴。但有時大 Key 是在程序
    的頭像 發表于 03-28 22:06 ?667次閱讀
    GaussDB(for <b class='flag-5'>Redis</b>) 特性揭秘:大 key 治理

    GaussDB(for Redis) 游戲實踐:玩家下線行為上報

    實現以上功能時,感知用戶下線行為延遲較大,導致上報時間不準確。華為云 GaussDB(for Redis)作為一款企業級游戲數據庫,具備卓越的企業級能力,能及時上報用戶下線行為,并被廣泛應用于排行榜等多種業務場景。 基于 Redis
    的頭像 發表于 03-28 22:03 ?522次閱讀

    新版 Redis 不再“開源”,對使用者都有哪些影響?

    2024 年 3 月 20 日,Redis Labs 宣布從 Redis 7.4 開始,將原先比較寬松的 BSD 源碼使用協議修改為 RSAv2和 SSPLv1協議。該變化意味著 Redis
    的頭像 發表于 03-27 22:30 ?492次閱讀
    新版 <b class='flag-5'>Redis</b> 不再“開源”,對使用者都有哪些影響?

    Redis實現分布式多規則限流的方式介紹

    市面上很多介紹 Redis 如何實現限流的,但是大部分都有一個缺點,就是只能實現單一的限流,比如 1 分鐘訪問 1 次或者 60 分鐘訪問 10 次這種,但是如果想一個接口兩種規則都需要滿足呢,我們的項目又是分布式項目,應該如何
    的頭像 發表于 02-26 10:07 ?499次閱讀
    <b class='flag-5'>Redis</b><b class='flag-5'>實現</b>分布式多規則限流的方式介紹

    Redis官方搜索引擎來了,性能炸裂!

    RediSearch 是一個 Redis 模塊,為 Redis 提供查詢、二級索引和全文搜索功能。
    的頭像 發表于 02-21 10:01 ?2356次閱讀
    <b class='flag-5'>Redis</b>官方搜索引擎來了,性能炸裂!

    Redis可以實現消息中間件MQ的功能

    是一種通信模式:發送者(PUBLISH)發送消息,訂閱者(SUBSCRIBE)接收消息,可以實現進程間的消息傳遞   Redis可以實現消息中間件MQ的功能,通過發布訂閱實現消息
    的頭像 發表于 01-25 14:48 ?941次閱讀
    <b class='flag-5'>Redis</b>可以<b class='flag-5'>實現</b>消息中間件MQ的功能

    騰訊科技獲區塊鏈網絡事務處理專利

    據專利摘要介紹,此方法涉及的步驟可概括如下:收集待處理事務數據集的統計信息,此數據集含有多個接收并待處理的事務數據;制定獲取區塊鏈網絡對事務數據的打包標準;如果統計信息符合打包要求,將事務
    的頭像 發表于 01-08 11:36 ?564次閱讀
    主站蜘蛛池模板: 校园春色亚洲欧美| 啪啪日韩| 2345成人高清毛片| 亚洲精品色一区色二区色三区| 日本aaaa| 三级黄网站| av2021天堂网手机版| 大又大又粗又爽女人毛片| 永久免费毛片| 精品福利视频网| 五月激情婷婷网| 国产精品资源网| 天堂网www中文在线| 国产福利在线观看一区二区| 月夜免费观看高清在线完整| 韩国三级视频| 午夜影院免费观看视频| 一级美女片| 欧美日韩在线成人免费| 天堂在线链接| 精品福利视频网| 精品色| a级午夜毛片免费一区二区| 国产免费亚洲| 黄色一级片视频| 日本操穴| 亚洲五月激情综合图片区| 人人草人人爽| 奇米影视四色7777| 亚洲www网站| 一级特黄aaa大片| 日本口工全彩无遮拦漫画大| 三级理论手机在线观看视频| 天天天色综合| 亚欧洲乱码专区视频| 美女拍拍拍黄色| 99精品偷自拍| 日本黄色高清视频| 国产午夜久久影院| 三级视频网站| 九九热在线免费观看|