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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

分布式内存数据库--Redis事务

發(fā)布時(shí)間:2024/10/8 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式内存数据库--Redis事务 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、 事務(wù):

與關(guān)系型數(shù)據(jù)庫一樣redis也支持事務(wù)。也就是可以一次執(zhí)行多個(gè)命令,本質(zhì)是一組命令的集合。一個(gè)事務(wù)中的所有命令都會序列化,按順序地串行化執(zhí)行而不會被其它命令插入,不許加塞。

二、 事務(wù)能干嘛?

一個(gè)隊(duì)列中,一次性、順序性、排他性的執(zhí)行一系列命令。

三、 redis事務(wù)支持的命令

1、 MULTI:標(biāo)記一個(gè)事務(wù)塊的開始。 隨后的指令將在執(zhí)行EXEC時(shí)作為一個(gè)原子執(zhí)行。

2、 EXEC:執(zhí)行事務(wù)中所有在排隊(duì)等待的指令并將鏈接狀態(tài)恢復(fù)到正常 當(dāng)使用WATCH 時(shí),只有當(dāng)被監(jiān)視的鍵沒有被修改,且允許檢查設(shè)定機(jī)制時(shí),EXEC會被執(zhí)行。

3、 DISCARD:刷新一個(gè)事務(wù)中所有在排隊(duì)等待的指令,并且將連接狀態(tài)恢復(fù)到正常。如果已使用WATCH,DISCARD將釋放所有被WATCH的key。

4、 WATCH:標(biāo)記所有指定的key 被監(jiān)視起來,在事務(wù)中有條件的執(zhí)行(樂觀鎖)。

事務(wù)可以一次執(zhí)行多個(gè)命令, 并且?guī)в幸韵聝蓚€(gè)重要的保證:
事務(wù)是一個(gè)單獨(dú)的隔離操作:事務(wù)中的所有命令都會序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過程中,不會被其他客戶端發(fā)送來的命令請求所打斷。事務(wù)是一個(gè)原子操作:事務(wù)中的命令要么全部被執(zhí)行,要么全部都不執(zhí)行。

四、 redis事務(wù)的操作

1、 正常執(zhí)行


使用MULTI開啟一個(gè)事務(wù),每當(dāng)添加一個(gè)命令,將該命令加入隊(duì)列,使用EXEC命令提交時(shí)全部執(zhí)行。

2、 放棄事務(wù)


使用命令DISCARD取消事務(wù)。

3、 全體連坐

全體連坐的意思就是在一個(gè)事務(wù)中有一條語句語法有錯(cuò)誤就會導(dǎo)致這條事務(wù)全部失效。

命令出錯(cuò),所有的命令失效。

4、 冤頭債主

意思就是在所有的命令均為正確的情況下,其中一條命令沒有拿到數(shù)據(jù),而導(dǎo)致該條數(shù)據(jù)為空,但是其他命令還是會執(zhí)行成功。

K99不存在,但是其他的命令還是執(zhí)行成功。

5、 WATCH操作

WATCH用于監(jiān)控鍵是否發(fā)生改變。被 WATCH 的鍵會被監(jiān)視,并會發(fā)覺這些鍵是否被改動過了。 如果有至少一個(gè)被監(jiān)視的鍵在 EXEC 執(zhí)行之前被修改了, 那么整個(gè)事務(wù)都會被取消, EXEC 返回nil-reply來表示事務(wù)已經(jīng)失敗。

悲觀鎖:

每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人會修改,所以每次在拿數(shù)據(jù)的時(shí)候都會上鎖,這樣別人想拿這個(gè)數(shù)據(jù)就會block直到它拿到鎖。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫里邊就用到了很多這種鎖機(jī)制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。

樂觀鎖:

每次去拿數(shù)據(jù)的時(shí)候都認(rèn)為別人不會修改,所以不會上鎖,但是在更新的時(shí)候會判斷一下在此期間別人有沒有去更新這個(gè)數(shù)據(jù),可以使用版本號等機(jī)制。樂觀鎖適用于多讀的應(yīng)用類型,這樣可以提高吞吐量。
WATCH使用的是樂觀鎖策略。
一旦執(zhí)行了exec之前加的監(jiān)控鎖都會被取消掉了?;蛘呤褂胾nwatch取消監(jiān)控。

小結(jié)

1、WATCH類似于樂觀鎖,在事務(wù)提交時(shí),如果key的值已被別的客戶端改變,整個(gè)事務(wù)隊(duì)列都不會執(zhí)行。
2、通過WATCH命令在事務(wù)執(zhí)行之前監(jiān)控了多個(gè)keys,若在WATCH之后key的值發(fā)生了變化,EXEC命令執(zhí)行的事務(wù)將被放棄。
3、事務(wù)的三階段
開啟–MULTI,入隊(duì),執(zhí)行-EXEC。
4、事務(wù)的三特性
單獨(dú)隔離操作、沒有隔離級別的概念、不保證原子性(執(zhí)行失敗、集體連坐、冤頭債主等)。

總結(jié)

以上是生活随笔為你收集整理的分布式内存数据库--Redis事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。