站長資訊網
        最全最豐富的資訊網站

        Redis的事務及樂觀鎖的應用

        相信phper都或多或少知道事務,在一些場景中也會經常用到事務。比如購買了一個產品,需要向訂單表插入一條數據,還要修改用戶表的余額字段等等。這兩個操作必須是要么一起成功,要么都失敗,否則就會產生數據不一致的情況。

        Redis中也支持事務的特性。雖然沒有傳統關系型數據庫的事務功能那樣強大,但它的使用非常簡單。

        事務

        MULTI

        multi標志個一個事務的開始。隨后的指令將在執行EXEC時作為一個原子執行。

        DISCARD

        Discard 命令用于取消事務,放棄執行事務塊內的所有命令。

        EXEC

        exec命令用于執行所有事務塊內的命令

        介紹了上面三個命令后,我們來完成一個小功能,用戶關注:

        比如A用戶關注了B,那么需要在A的關注表中添加B,此外B的粉絲表中要添加A;這兩個操作要作為一個原子來執行的。

        實現代碼如下:

        $redis->multi()     ->sadd('like:A', 'B')     ->sadd('fans:B', 'A')     ->exec();

        是不是使用起來非常簡單。

        樂觀鎖

        首先來介紹下什么是樂觀鎖,以及它對應的悲觀鎖。

        悲觀鎖:想法很悲觀啦,對自己的男朋友不放心,只要自己和男朋友在一起時,任何人都接觸不了他男朋友。Mysql中的行鎖、表鎖等,都屬于悲觀鎖。

        樂觀鎖:很樂觀很天真,對自己的男朋友放心,自己和男朋友在一起時,有其他朋友找她男朋友聊天時,她不會阻止。但每次兩人在一起時,她都會對男朋友的最近狀態做評定,判斷他是否有問題。沒有問題才會繼續和他在一起,否則就拜拜。

        下面有一個場景:Redis存放著token,但是這個token是要隔一段時間就需要更新的。悲觀鎖的作為是,修改前我就要將它鎖定,這個時候其他任何請求都不能修改他,直到我修改完成后,才會解除鎖定。樂觀鎖的作法則是,修改的時候不會鎖定,但修改前我會觀察它的狀態,如果他沒有被修改,那么我就做修改,如果狀態改變了,那么我就不做修改的操作。、

        Redis中如何使用樂觀鎖的呢?

        Redis中提供了一個命令Watch,標記所有指定的key 被監視起來,在事務中有條件的執行。

        下面是偽代碼:

        $redis->watch('token');  $redis->multi()     ->set('token','sfwefawfwefa323')     ->exec();

        樂觀鎖和悲觀鎖都有自己的使用場景,大家可以自行查閱相關信息,這里就不多贅述了。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 精品伦精品一区二区三区视频| 精品无码国产一区二区三区51安 | 亚洲精品永久在线观看| 久久国产亚洲精品麻豆| 亚洲AV无码久久精品色欲| 久久精品成人欧美大片| 精品亚洲永久免费精品| 精品爆乳一区二区三区无码av| 亚洲线精品一区二区三区 | 亚洲国产精品一区二区三区久久 | 亚洲国产精品久久久久久| 国产最新进精品视频| 亚洲精品色午夜无码专区日韩| 老司机性色福利精品视频| 精品国产午夜理论片不卡| 亚洲国产一成久久精品国产成人综合| 国产VA免费精品高清在线| 久久成人精品视频| 国产精品免费高清在线观看| 无码人妻精品一区二区三区66| 欧美亚洲日本久久精品| 精品国产一级在线观看| 国产精品嫩草影院久久| 99爱在线视频这里只有精品| 精品一区二区久久| 精品久久久久久久| 精品久久久久久国产91| 精品国产美女福利到在线不卡| 91精品国产综合久久精品| 国产成人精品午夜福利| 久久99精品国产自在现线小黄鸭| 亚洲精品人成无码中文毛片| 欧美精品亚洲精品日韩精品| 欧美激情精品久久久久久久| 久久精品国产亚洲av瑜伽| 国产精品亚洲视频| 精品国产一区二区22| 久久91这里精品国产2020| 久久精品成人| 亚洲午夜成人精品电影在线观看| 亚洲午夜精品一级在线播放放|