女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

剖析!Redis事務(wù)實(shí)現(xiàn)原理

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

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

整理 | 包包

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

在Redis中實(shí)現(xiàn)事務(wù)主要依靠以下幾個(gè)命令來實(shí)現(xiàn):

剖析!Redis事務(wù)實(shí)現(xiàn)原理


Redis事務(wù)從開始到結(jié)束通常會(huì)通過三個(gè)階段:

1.事務(wù)開始

2.命令入隊(duì)

3.事務(wù)執(zhí)行

以下是一個(gè)最簡單的Redis事務(wù)流程:

剖析!Redis事務(wù)實(shí)現(xiàn)原理


第一步跟其他的關(guān)系型數(shù)據(jù)庫類似,也是需要開啟一個(gè)事務(wù),在Redis中的命令如下:

剖析!Redis事務(wù)實(shí)現(xiàn)原理


Redis中使用MULTI命令標(biāo)記事務(wù)的開始,可以理解為在傳統(tǒng)關(guān)系型數(shù)據(jù)庫中的BEGIN TRANCATION語句,Redis將執(zhí)行該命令的客戶端從非事務(wù)狀態(tài)切換成事務(wù)狀態(tài),這一切換是通過在客戶端狀態(tài)的flags屬性中打開REDIS_MULTI標(biāo)識(shí)完成, 我們看下Redis中對應(yīng)部分的源碼實(shí)現(xiàn):

剖析!Redis事務(wù)實(shí)現(xiàn)原理


在打開事務(wù)標(biāo)識(shí)的客戶端里,這些命令都會(huì)被暫存到一個(gè)命令隊(duì)列里,不會(huì)因?yàn)橛脩魰?huì)的輸入而立即執(zhí)行。

第二步就是執(zhí)行事務(wù)內(nèi)路基,即真正的業(yè)務(wù)邏輯:

剖析!Redis事務(wù)實(shí)現(xiàn)原理


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

剖析!Redis事務(wù)實(shí)現(xiàn)原理


這兩個(gè)命令可被視為等同于關(guān)系型數(shù)據(jù)庫中的COMMIT/ROLLBACK語句。

這里需要注意的是,在客戶端打開了事務(wù)標(biāo)識(shí)后,只有命令:EXEC,DISCARD,WATCH,MULTI命令會(huì)被立即執(zhí)行,其它命令服務(wù)器不會(huì)立即執(zhí)行,而是將這些命令放入到一個(gè)事務(wù)隊(duì)列里面,然后向客戶端返回一個(gè)QUEUED回復(fù) ;Redis客戶端有自己的事務(wù)狀態(tài),這個(gè)狀態(tài)保存在客戶端狀態(tài)mstate屬性中,mstate的結(jié)構(gòu)體類型是multiState,我們看下multiState的定義:

剖析!Redis事務(wù)實(shí)現(xiàn)原理


我們再看下結(jié)構(gòu)體類型multiCmd的結(jié)構(gòu):

剖析!Redis事務(wù)實(shí)現(xiàn)原理


事務(wù)隊(duì)列以先進(jìn)先出的保存方法,較先入隊(duì)的命令會(huì)被放到數(shù)組的前面,而較后入隊(duì)的命令則會(huì)被放到數(shù)組的后面。

當(dāng)開啟事務(wù)標(biāo)識(shí)的客戶端發(fā)送EXEC命令的時(shí)候,服務(wù)器就會(huì)執(zhí)行,客戶端對應(yīng)的事務(wù)隊(duì)列里的命令,我們來看下EXEC 的實(shí)現(xiàn)細(xì)節(jié):

剖析!Redis事務(wù)實(shí)現(xiàn)原理


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

剖析!Redis事務(wù)實(shí)現(xiàn)原理


如果在set k2 v2處失敗,set k1已成功不會(huì)回滾,set k3還會(huì)繼續(xù)執(zhí)行;Redis的事務(wù)和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫事務(wù)的最大區(qū)別在于,Redis不支持事務(wù)的回滾機(jī)制,即使事務(wù)隊(duì)列中的某個(gè)命令在執(zhí)行期間出現(xiàn)錯(cuò)誤,整個(gè)事務(wù)也會(huì)繼續(xù)執(zhí)行下去,直到將事務(wù)隊(duì)列中的所有命令都執(zhí)行完畢為止,我們看下面的例子:

剖析!Redis事務(wù)實(shí)現(xiàn)原理


Redis的作者在事務(wù)功能的文檔中解釋說,不支持事務(wù)回滾是因?yàn)檫@種復(fù)雜的功能和Redis追求的簡單高效的設(shè)計(jì)主旨不符合,并且他認(rèn)為,Redis事務(wù)的執(zhí)行時(shí),錯(cuò)誤通常都是編程錯(cuò)誤造成的,這種錯(cuò)誤通常只會(huì)出現(xiàn)在開發(fā)環(huán)境中,而很少會(huì)在實(shí)際的生產(chǎn)環(huán)境中出現(xiàn),所以他認(rèn)為沒有必要為Redis開發(fā)事務(wù)回滾功能。所以我們在討論Redis事務(wù)回滾的時(shí)候,一定要區(qū)分命令發(fā)生錯(cuò)誤的時(shí)候。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Redis 再次開源!

    “ ?Redis 現(xiàn)已采用 AGPLv3 開源許可證。? ” Redis CEO 的 Blog 以下是 Redis CEO Rowan Trollope 的 Blog: 像 AWS 和 GCP 這樣
    的頭像 發(fā)表于 05-06 18:26 ?297次閱讀

    redis三種集群方案詳解

    Redis中提供的集群方案總共有三種(一般一個(gè)redis節(jié)點(diǎn)不超過10G內(nèi)存)。
    的頭像 發(fā)表于 03-31 10:46 ?514次閱讀
    <b class='flag-5'>redis</b>三種集群方案詳解

    Redis實(shí)戰(zhàn)筆記

    在目前的技術(shù)選型中,Redis 儼然已經(jīng)成為了系統(tǒng)高性能緩存方案的事實(shí)標(biāo)準(zhǔn),因此現(xiàn)在?Redis 也成為了后端開發(fā)的基本技能樹之一。 ? 基于上述情況,今天給大家分享一份?杰哥?親筆撰寫的內(nèi)部
    的頭像 發(fā)表于 02-09 09:12 ?299次閱讀
    <b class='flag-5'>Redis</b>實(shí)戰(zhàn)筆記

    華為云 Flexus X 加速 Redis 案例實(shí)踐與詳解

    Redis 加速鏡像,更是為開發(fā)者提供了極大的便利。本文將詳細(xì)介紹如何利用華為云 Flexus X 實(shí)例自帶的 Redis 鏡像,快速部署并配置 Redis,以及通過實(shí)際案例展示其便捷性和高效性。 一、華為云 Flexus
    的頭像 發(fā)表于 01-23 17:52 ?256次閱讀
    華為云 Flexus X 加速 <b class='flag-5'>Redis</b> 案例實(shí)踐與詳解

    Redis Cluster之故障轉(zhuǎn)移

    1. Redis Cluster 簡介 Redis Cluster 是 Redis 官方提供的 Redis 集群功能。 為什么要實(shí)現(xiàn)
    的頭像 發(fā)表于 01-20 09:21 ?736次閱讀
    <b class='flag-5'>Redis</b> Cluster之故障轉(zhuǎn)移

    云服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 Redis 集群

    Redis 集群是一種分布式的 Redis 解決方案,能夠在多個(gè)節(jié)點(diǎn)之間分片存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)水平擴(kuò)展和高可用性。與傳統(tǒng)的主從架構(gòu)不同,Redis 集群支持?jǐn)?shù)據(jù)自動(dòng)分片、主節(jié)點(diǎn)故障自動(dòng)切換
    的頭像 發(fā)表于 01-13 13:37 ?299次閱讀
    云服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 <b class='flag-5'>Redis</b> 集群

    華為云Flexus X實(shí)例,Redis性能加速評測及對比

    隨著云計(jì)算技術(shù)的飛速發(fā)展,Redis 作為一種高性能的內(nèi)存數(shù)據(jù)庫,在各種應(yīng)用場景中發(fā)揮著越來越重要的作用。為了滿足不同用戶對 Redis 性能的高要求,華為云推出了 Flexus X 實(shí)例,并提供了
    的頭像 發(fā)表于 12-29 15:47 ?414次閱讀
    華為云Flexus X實(shí)例,<b class='flag-5'>Redis</b>性能加速評測及對比

    華為云 Flexus X 輕松實(shí)現(xiàn) Redis 一主多從高效部署

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

    Redis使用重要的兩個(gè)機(jī)制:Reids持久化和主從復(fù)制

    今天這篇文章,我們一起了解 Redis 使用中非常重要的兩個(gè)機(jī)制:Reids 持久化和主從復(fù)制。 我們都知道Redis是一個(gè)內(nèi)存數(shù)據(jù)庫,在學(xué)習(xí)主從同步之前,我們首先要想到 Redis 是如何做數(shù)據(jù)
    的頭像 發(fā)表于 12-18 10:33 ?344次閱讀
    <b class='flag-5'>Redis</b>使用重要的兩個(gè)機(jī)制:Reids持久化和主從復(fù)制

    Redis緩存與Memcached的比較

    Redis和Memcached都是廣泛使用的內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),它們主要用于提高應(yīng)用程序的性能,通過減少對數(shù)據(jù)庫的直接訪問來加速數(shù)據(jù)檢索。以下是對Redis和Memcached的比較,涵蓋了它們的一些
    的頭像 發(fā)表于 12-18 09:33 ?489次閱讀

    nginx+lua+redis實(shí)現(xiàn)灰度發(fā)布

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

    全新NVIDIA NIM微服務(wù)實(shí)現(xiàn)突破性進(jìn)展

    全新 NVIDIA NIM 微服務(wù)實(shí)現(xiàn)突破性進(jìn)展,可助力氣象技術(shù)公司開發(fā)和部署 AI 模型,實(shí)現(xiàn)對降雪、結(jié)冰和冰雹的預(yù)測。
    的頭像 發(fā)表于 11-21 10:07 ?579次閱讀

    Spring事務(wù)實(shí)現(xiàn)原理

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

    恒訊科技分析:云數(shù)據(jù)庫rds和redis區(qū)別是什么如何選擇?

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

    K8S學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 Redis 集群

    前言 Redis 是在開發(fā)過程中經(jīng)常用到的緩存中間件,為了考慮在生產(chǎn)環(huán)境中穩(wěn)定性和高可用,Redis通常采用集群模式的部署方式。 在制定Redis集群的部署策略時(shí),常規(guī)部署在虛擬機(jī)上的方式配置繁瑣
    的頭像 發(fā)表于 07-03 15:30 ?1108次閱讀
    K8S學(xué)習(xí)教程(二):在 PetaExpress KubeSphere容器平臺(tái)部署高可用 <b class='flag-5'>Redis</b> 集群