<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      qq4615

      導航

      一、Redis事務(wù)原理分析

      一、Redis事務(wù)原理分析

        Redis的事務(wù)里面,采用的是樂觀鎖,主要是為了提高性能,減少客戶端的等待。由幾個命令構(gòu)成:WATCH, UNWATCH, MULTI, EXEC, DISCARD
      通過WATCH,可以實現(xiàn)CAS操作。使用WATCH監(jiān)聽一些鍵,然后去檢查鍵的值,然后根據(jù)鍵的值來決定是否還需要進行MULTI,如果鍵的值被改了,則重新。(因為有可能在執(zhí)行WATCH前,鍵的值被改了,所以需要先WATCH,然后再作判斷)。在執(zhí)行MULTI命令后,如果中途WATCH的鍵的值被修改了,后續(xù)再執(zhí)行EXEC時,整個事務(wù)都會被終止。

       

       Redis事務(wù)實現(xiàn)原理 : Redis是通過WATCH命令,來保證當前事務(wù)的數(shù)據(jù)是否被修改過,如果被修改了,則整個事務(wù)會中止,不再執(zhí)行。那么,Redis在實現(xiàn)的時候,會保存對應(yīng)的watch key,然后中途如果該Key被修改了,則會將對應(yīng)的所有客戶端server端保存所有客戶端watch鏈表的標志位都置為CLIENT_DIRTY_CAS,表示數(shù)據(jù)被修改,后續(xù)執(zhí)行EXEC的時候則會被中斷,從而實現(xiàn)事務(wù)。而UNWATCH命令則是從保存的watch_keys里面移除。MULTI命令僅僅將客戶端的標志位flags置為CLIENT_MULTI,表示處于MULTI狀態(tài),該狀態(tài)下,后續(xù)的命令(除了MULTI/WATCH/DISCARD/EXEC)外,其它命令都會被保存到一個列表里面,直到EXEC或者DISCARD命令執(zhí)行。如果中途出現(xiàn)了語法錯誤之類的命令,則會將flags置為CLIENT_DIRTY_EXEC。后續(xù)執(zhí)行EXEC時,如果flags存在CLIENT_DIRTY_CAS或者CLIENT_DIRTY_EXEC,則整個事務(wù)會被中止,不執(zhí)行任何命令。

       

      ACID分析 :

      1. Atomicity
        指的是要么不執(zhí)行,要么全部執(zhí)行。當其中一部分執(zhí)行了,但是另外一部分沒有執(zhí)行,那么作為整個事務(wù),是全部要回滾,都不執(zhí)行的,而Redis在執(zhí)行過程中,如果出現(xiàn)操作和類型不一致,則會導致一部分執(zhí)行,而一部分錯誤的情況,即不滿足原子性。當然,除去部分失誤外,還是能夠保證原子性的,但是這并不是嚴格的原子性要求。
      2. Durability
        持久性,事務(wù)提交后,無論出現(xiàn)任何情況,包括系統(tǒng)斷電之類的,重啟后都是可以恢復的。對于Redis來說,即使開啟了AOF以及設(shè)置為always,也存在命令執(zhí)行一部分后,系統(tǒng)宕機而導致數(shù)據(jù)不一致的情況,不能恢復。一般都是通過write-ahead-logging來實現(xiàn)的,即事先寫日志,而Redis是邊執(zhí)行邊寫日志。
      3. Consistency
        一致性,指從一個有效的狀態(tài)轉(zhuǎn)到另一個有效的狀態(tài),不滿足上述的兩個條件,也無法保存一致性,即會出現(xiàn)中間狀態(tài)。比如從一個人的賬戶轉(zhuǎn)到另外一個人上面,執(zhí)行了轉(zhuǎn)出,但是沒有執(zhí)行轉(zhuǎn)入的時候宕機了,就會導致數(shù)據(jù)的不一致。
      4. Isolation
        隔離性,在多個事務(wù)并發(fā)的情況下,事務(wù)之間不會被影響。對于Redis來說,事務(wù)的執(zhí)行是串行的,中途不會插入其它命令的執(zhí)行,所以是滿足隔離性的。

      WATCH命令實現(xiàn) :

       WATCH監(jiān)聽Key,首先就要有地方保存監(jiān)聽的Key,Redis針對不同的客戶端,會在客戶端的結(jié)構(gòu)體里面維護一個WATCH監(jiān)聽Key的列表,以及在Server里面維護一個全局的哈希表,Key為被監(jiān)聽的Key,Value則為一個鏈表,里面保存了所有監(jiān)聽該Key的客戶端。

      當執(zhí)行WATCH account時,則首先會判斷該Key是否已在客戶端里面,如果存在,則直接返回,否則加入到客戶端對應(yīng)的watched_keys列表里面,然后再將其加入到對應(yīng)DBwatched_keys字典表里面,Keyaccount,Value則為該客戶端。

      posted on 2018-05-21 16:21  圣彼得  閱讀(272)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 无码午夜福利片| 国产内射性高湖| 崇州市| 日韩av片无码一区二区三区| 亚洲欧洲日产国无高清码图片| 欧洲国产成人久久精品综合| 国产在线一区二区不卡| 麻豆tv入口在线看| 成年女性特黄午夜视频免费看| 日韩幕无线码一区中文| 最近2019中文字幕大全第二页 | 亚洲aⅴ天堂av天堂无码麻豆| 中文字幕在线无码一区二区三区| 精品国产这么小也不放过| 中文字幕色偷偷人妻久久| 国产女主播喷水视频在线观看 | 永久免费无码成人网站| 无码乱人伦一区二区亚洲一| 久久国产乱子伦免费精品无码| 97视频精品全国免费观看| 三级国产在线观看| av资源在线看免费观看| 国产av中文字幕精品| 色悠悠成人综合在线视频| 亚洲免费视频一区二区三区| 国产在线观看免费观看不卡| 婷婷久久香蕉五月综合加勒比| 97超级碰碰碰久久久久| 天堂V亚洲国产V第一次| 精品久久久久久无码中文野结衣| 国产免费久久精品44| 99国产精品国产精品久久| 日本一区二区三区专线| 忘忧草在线社区www中国中文| 日本大片在线看黄a∨免费| 日韩精品一区二区三区蜜臀| 亚洲成人精品综合在线| 乱人伦中文视频在线| 久久天天躁夜夜躁狠狠85| 无码人妻斩一区二区三区| 国内自拍偷拍一区二区三区|