chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(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ù)必須滿(mǎn)足ACID原則(原子性、一致性、隔離性和持久性)。簡(jiǎn)單來(lái)說(shuō)事務(wù)其實(shí)就是打包一組操作(或者命令)作為一個(gè)整體,在事務(wù)處理時(shí)將順序執(zhí)行這些操作,并返回結(jié)果,如果其中任何一個(gè)環(huán)節(jié)出錯(cuò),所有的操作將被回滾。

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

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


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

1.事務(wù)開(kāi)始

2.命令入隊(duì)

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

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

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


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

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


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

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


在打開(kāi)事務(wù)標(biāo)識(shí)的客戶(hù)端里,這些命令都會(huì)被暫存到一個(gè)命令隊(duì)列里,不會(huì)因?yàn)橛脩?hù)會(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ù)庫(kù)中的COMMIT/ROLLBACK語(yǔ)句。

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

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


我們?cè)倏聪陆Y(jié)構(gòu)體類(lèi)型multiCmd的結(jié)構(gòu):

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


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

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

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


最后我們?cè)倩仡櫼幌率聞?wù)本身的特性, 在傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)中的事務(wù)必須依靠ACID來(lái)保證事務(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ù)庫(kù)事務(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ù)功能的文檔中解釋說(shuō),不支持事務(wù)回滾是因?yàn)檫@種復(fù)雜的功能和Redis追求的簡(jiǎn)單高效的設(shè)計(jì)主旨不符合,并且他認(rèn)為,Redis事務(wù)的執(zhí)行時(shí),錯(cuò)誤通常都是編程錯(cuò)誤造成的,這種錯(cuò)誤通常只會(huì)出現(xiàn)在開(kāi)發(fā)環(huán)境中,而很少會(huì)在實(shí)際的生產(chǎn)環(huán)境中出現(xiàn),所以他認(rèn)為沒(méi)有必要為Redis開(kāi)發(fā)事務(wù)回滾功能。所以我們?cè)谟懻揜edis事務(wù)回滾的時(shí)候,一定要區(qū)分命令發(fā)生錯(cuò)誤的時(shí)候。


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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Redis集群部署配置詳解

    Redis集群是一種分布式Redis解決方案,通過(guò)數(shù)據(jù)分片和主從復(fù)制實(shí)現(xiàn)高可用性和橫向擴(kuò)展。集群將整個(gè)數(shù)據(jù)集分割成16384個(gè)哈希槽(hash slots),每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分槽位。
    的頭像 發(fā)表于 07-17 11:04 ?129次閱讀

    Redis集群部署與性能優(yōu)化實(shí)戰(zhàn)

    Redis作為高性能的內(nèi)存數(shù)據(jù)庫(kù),在現(xiàn)代互聯(lián)網(wǎng)架構(gòu)中扮演著關(guān)鍵角色。作為運(yùn)維工程師,掌握Redis的部署、配置和優(yōu)化技能至關(guān)重要。本文將從實(shí)戰(zhàn)角度出發(fā),詳細(xì)介紹Redis集群的搭建、性能優(yōu)化以及監(jiān)控運(yùn)維的核心技術(shù)。
    的頭像 發(fā)表于 07-08 17:56 ?241次閱讀

    【經(jīng)驗(yàn)分享】在Omni3576上編譯Redis-8.0.2源碼,并安裝及性能測(cè)試

    本文首先介紹Redis是什么,然后介紹如何在Omni3576上編譯Redis-8.0.2源碼,以及從源碼編譯、安裝Redis,最后介紹如何在Omni3576上運(yùn)行Redis性能測(cè)試,并
    的頭像 發(fā)表于 06-05 08:05 ?300次閱讀
    【經(jīng)驗(yàn)分享】在Omni3576上編譯<b class='flag-5'>Redis</b>-8.0.2源碼,并安裝及性能測(cè)試

    【幸狐Omni3576邊緣計(jì)算套件試用體驗(yàn)】Redis最新8.0.2版本源碼安裝及性能測(cè)試

    本文首先介紹Redis是什么,然后介紹如何在Omni3576上編譯Redis-8.0.2源碼,以及從源碼編譯、安裝Redis,最后介紹如何在Omni3576上運(yùn)行Redis性能測(cè)試,并
    發(fā)表于 06-03 01:28

    Redis 再次開(kāi)源!

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

    redis三種集群方案詳解

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

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

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

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

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

    華為云Flexus X實(shí)例,Redis性能加速評(píng)測(cè)及對(duì)比

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

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

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

    Redis緩存與Memcached的比較

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

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

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

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

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

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

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

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

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