日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

事务例子_Redis事务系列之一Redis事务详解

發布時間:2024/9/27 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 事务例子_Redis事务系列之一Redis事务详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

本章是redis事務系列知識第一章,redis事務系列主要講解以下內容:

  • redis 事務

  • redis樂觀鎖講解

  • redis樂觀鎖實現秒殺

  • 我們一步一步來,本章主要講解事務。

    二、事務

    2.1事務闡述

    講redis事務之前,我們先來看看事務的定義。

    事務:一個不可分割的工作單位,事務中包括的操作要么都做,要么都不做。

    但redis的事務不并不是完整意義上的事務,我們稱之為弱事務,為什么這么說呢?

    redis中并沒有回滾這種機制,也就是說,在一個事務中,中間一條命令執行失敗,并不會導致前面已經執行的指令回滾。也不會造成后續的指令不做。我會在下面畫圖驗證不支持回滾。

    2.2 事務命令講解

    事務的命令一共就五條,為了方便大家記憶,我們先記住下面三條命令,:

    1.開啟事務:MULTI

    2.執行事務:EXEC

    3.取消事務:DISCARD

    就像mysql中用begin開啟事務、用commit結束事務一樣。redis中是用multi開啟事務,用exec執行命令。如果在exec之前你不想執行事務了,可以用discard取消當前事務。下面我們舉例說明:

    開啟事務和執行事務的例子

    > multi //開啟事務
    > set s1 aaa
    > set s2 bbb
    > exec //執行事務
    > get s1 // 獲取s1的值
    "aaa"
    > get s2 // 獲取s2的值
    "bbb"

    開啟事務和取消事務的例子

    > multi //開啟事務
    > set s3 222
    > discard //結束事務
    OK
    > exec //因為事務已經在上面取消了,所以在這里執行事務會報錯。
    (error) ERR EXEC without MULTI
    > get s3 //事務被取消了,所以這里s3根本就沒有值
    (nil)

    2.3 事務為什么不支持回滾

    講解“事務為什么不支持回滾”之前我們先來匯總一下redis事務執行異常的幾種情況,然后再總結事務為什么不支持回滾。

  • 語法錯誤導致事務執行異常,該事務取消

  • 在開啟事務后,修改h1值為11111,h2值為2222,但h2語法錯誤,最終導致事務提交失敗,h1、h2保留原值。

    > set h1 11
    > set h2 22
    > multi //開啟事務
    > set h1 11111
    > sets h2 2222 // 語法錯誤,下面報錯
    (error) ERR unknown command `sets`, with args beginning with: `h2`, `2222`,
    127.0.0.1:6379> exec //執行事務,因為前面有語法錯誤,所以此事務取消
    (error) EXECABORT Transaction discarded because of previous errors.
    > get h1 // h1和h2的值并沒有在事務中改變
    "11"
    > get h2
    "22"

    2.運行時錯誤(Redis類型錯誤)導致事務異常

    在開啟事務后,修改s1值為1111111,s2值為2222222,但將s2的類型作為List,在運行時檢測類型錯誤,最終導致事務提交失敗,此時事務并沒有回滾,而是跳過錯誤命令繼續執行, 結果s1值改變、s2保留原值。

    > set s1 11
    > set s2 22
    > multi
    > set s1 1111111
    > lpush s2 2222222 //此處類型錯誤,s2的類型是字符傳,但我們把S2的類型作為List提交
    > exec //提交執行事務報錯。
    1) OK
    2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
    > get s1 //s1的值修改成功
    "1111111"
    > get s2 //s1的值修改失敗
    "22"

    總結:為什么Redis不支持事務回滾?

    以上兩個例子總結出,多數事務失敗是由語法錯誤或者數據結構類型錯誤導致的,語法錯誤說明在命令入隊前就進行檢測的,而類型錯誤是在執行時檢測的,Redis為提升性能而采用這種簡單的事務,這是不同于關系型數據庫的,特別要注意區分。

    2.4 watch和unwatch命令講解

    2.4.1 watch命令

    上面我們講到redis是的事務是不支持回滾的,但是我們一定要讓它回滾怎么辦呢?這就需要用的watch命令了。

    watch使用要注意:watch在mutil命令之前使用.

    watch的作用是:監控一個值是否發生變化,如果沒發生改變,它會執行事務隊列中的命令,提交事務;如果發生變化,將不會執行事務中的任何命令,同時事務回滾。最后無論是否回滾,Redis都會取消執行事務前的WATCH命令。

    這么說不太好理解,我們畫圖表示一下:

    下面我們用代碼驗證一下,場景如下:

    在事務開始前用WATCH監控a1,之后修改a1為c1111,MULTI開始事務,修改a2為c2222,執行EXEC,返回nil,說明事務回滾;查看下a2的值都沒有被事務中的命令所改變。

    代碼如下:

    //先設置2個值,我們用監控a1,然后用a2判斷是否發生的回滾。
    127.0.0.1:6379> set a1 1111
    127.0.0.1:6379> set a2 2222
    127.0.0.1:6379> watch a1 //監聽a1
    127.0.0.1:6379> set a1 c1111 // a1的值在監控后發生了改變。
    127.0.0.1:6379> multi //開始事務
    127.0.0.1:6379> set a2 c2222 //設置a2的值
    127.0.0.1:6379> exec //執行事務,發生錯誤,事務回滾
    (nil)
    127.0.0.1:6379> get a2 //a2的值并沒有被更改,依舊是2222
    "2222"

    2.4.2 unwatch命令

    unwatch命令是取消監控,這里就不過多介紹了,下面是代碼:

    > set k1 1111
    > set k2 2222
    > WATCH k1
    > set k1 11 //改變k1的值
    > UNWATCH //取消監控
    > MULTI //開啟事務
    > set k1 12
    > set k2 22
    > exec //執行事務成功了
    1) OK
    2) OK
    > get k1
    "12"
    > get k2
    "22"

    三、結尾

    好了,就講到這里吧,這一章雖然知識點不多,但是小編為了更加通俗地講出來也想了2、3天。
    碼字不易,希望大家關注一下小編,感謝!

    有什么問題或者意見,大家可以提出來。

    大家幫忙關注一下我微信公眾號。關注后我有上百套學習資料和視頻課程贈送。

    總結

    以上是生活随笔為你收集整理的事务例子_Redis事务系列之一Redis事务详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 激情第四色 | 99热免费 | 国产夫妻性爱视频 | 欧美色v | 蜜桃视频导航 | 激情视频网址 | 国产成人三级在线观看视频 | 久久精品国产电影 | 尤物在线免费观看 | 永久免费在线观看视频 | 日日草日日干 | 国产精品一区二三区 | 国产精品嫩草影院精东 | 一级大片儿| 一卡二卡在线观看 | 无码精品在线视频 | 六月丁香婷婷网 | 日韩精品欧美在线 | 少妇黄色片 | av直播在线观看 | 高h在线观看 | 久久成人国产精品 | 污视频网站免费 | 91制服诱惑| 天天爱夜夜爱 | 91免费观看视频 | 精品午夜福利在线观看 | 亚洲aaaaaa| 午夜影院久久 | 九九热视频精品在线观看 | 精品国产九九九 | 国产在线拍揄自揄拍 | www.黄色一片 | 麻豆91在线观看 | 精品韩国一区二区三区 | 人妻体内射精一区二区 | 日本成人片在线 | 翔田千里x88aⅴ | 狠狠操女人 | 亚洲福利视频一区二区三区 | 黑丝扣逼 | 日本午夜网 | 国产亚洲一区二区不卡 | 日韩精品一二三四区 | 女人下部全棵看视频 | aaa级黄色片 | 青青青视频在线 | 亚洲午夜福利一区二区三区 | 天美视频在线观看 | 欧美日韩精品一二三区 | 狠狠躁 | 午夜在线网站 | 国产亚洲精品久久 | 亚洲精品乱码久久久久久麻豆不卡 | 学生调教贱奴丨vk | 亚洲a色 | 久久精品在线视频 | 国产性色av| 最好看的中文字幕 | 亚a在线| 一级二级av | 国产成人三级在线观看视频 | 色综合视频网 | 日韩一区二区免费播放 | 日本高清免费看 | 国产精品美女自拍视频 | 92国产精品 | 尤物av在线| 一级黄色片免费在线观看 | 中文在线国产 | ass大乳尤物肉体pics | 亚洲一级在线播放 | 亚洲欧美激情一区二区三区 | 999免费| 粉嫩av渣男av蜜乳av | jjzz日本视频 | 色播五月激情 | 欧美大片在线看免费观看 | 国产十八熟妇av成人一区 | 亚洲av乱码久久精品蜜桃 | 97干视频| 老司机av福利 | 男人天堂视频网站 | 亚洲国产高清国产精品 | 日本公与丰满熄 | 亚洲爽片 | 91久久精品一区 | 欧美福利在线观看 | 99自拍视频 | 欧美性猛交xxxx乱大交 | 欧美成人综合网站 | 性色av免费观看 | 国产区在线观看视频 | 美女福利影院 | 国产精品成人久久久久 | 三级亚洲 | 中文字幕av久久 | 超碰在线免费观看97 | 捆绑调教sm束缚网站 |