最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Redis超強(qiáng)入門指南—Redis事務(wù)

2021-04-02 15:48 作者:動力節(jié)點(diǎn)小王本王  | 我要投稿



什么是事務(wù)?

事務(wù)是指一系列操作步驟,這一系列的操作步驟,要么完全地執(zhí)行,要么完全地不執(zhí)行。

Redis 中的事務(wù)(transaction)是一組命令的集合,至少是兩個或兩個以上的命令,redis 事務(wù)保證這些命令被執(zhí)行時中間不會被任何其他操作打斷。

視頻觀看戳??????


事務(wù)操作的命令

(1)?multi

語法: multi

作用:標(biāo)記一個事務(wù)的開始。事務(wù)內(nèi)的多條命令會按照先后順序被放進(jìn)一個隊(duì)列當(dāng)中。返回值:總是返回 ok

(2)?exec

語法:exec

作用:執(zhí)行所有事務(wù)塊內(nèi)的命令

返回值:事務(wù)內(nèi)的所有執(zhí)行語句內(nèi)容,事務(wù)被打斷,返回 nil

(3)?discard

語法:discard

作用:取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令返回值:總是返回 ok

4?watch

語法:watch key [key ...]

作用:監(jiān)視一個(或多個) key?,如果在事務(wù)執(zhí)行之前這個(或這些) key?被其他命令所改動, 那么事務(wù)將被打斷。

返回值:總是返回 ok

5unwatch

語法:unwatch

作用:取消 WATCH 命令對所有 key 的監(jiān)視。如果在執(zhí)行 WATCH 命令之后, EXEC 命令或 DISCARD 命令先被執(zhí)行了的話,那么就不需要再執(zhí)行UNWATCH 了

返回值:總是返回 ok


事務(wù)的實(shí)現(xiàn)

(1)?正常執(zhí)行事務(wù)

事務(wù)的執(zhí)行步驟:首先開啟事務(wù),其次向事務(wù)隊(duì)列中加入命令,最后執(zhí)行事務(wù)提交

例 1:事務(wù)的執(zhí)行:

1)?multi:用 multi?命令告訴 Redis,接下來要執(zhí)行的命令你先不要執(zhí)行,而是把它們暫時存起來(開啟事務(wù))

2)?saddworks?john?第一條命令進(jìn)入等待隊(duì)列(命令入隊(duì))?

3)sadd?works?rose?第二條命令進(jìn)入等待隊(duì)列(命令入隊(duì))?

4)exce?告知 redis?執(zhí)行前面發(fā)送的兩條命令(提交事務(wù))

查看 works 集合

(2)?事務(wù)執(zhí)行 exec?之前,入隊(duì)命令錯誤(語法錯誤;嚴(yán)重錯誤導(dǎo)致服務(wù)器不能正常工作(例如內(nèi)存不足)),放棄事務(wù)。

執(zhí)行事務(wù)步驟:

1)MULTI??正常命令

2)SET?key value 正常命令

3)INCR 命令語法錯誤

4)EXEC 無法執(zhí)行事務(wù),那么第一條正確的命令也不會執(zhí)行,所以 key?的值不會設(shè)置成功

結(jié)論:事務(wù)執(zhí)行 exec 之前,入隊(duì)命令錯誤,事務(wù)終止,取消,不執(zhí)行。

(3)?事務(wù)執(zhí)行 exec?命令后,命令執(zhí)行錯誤,事務(wù)提交

執(zhí)行步驟:

1)?MULTI?正常命令

2)?SET username?zhangsan?正常命令

3)?lpop?username 正常命令,語法沒有錯誤,執(zhí)行命令時才會有錯誤。

4)?EXEC?正常執(zhí)行,發(fā)現(xiàn)錯誤可以在事務(wù)提交前放棄事務(wù),執(zhí)行 discard.

結(jié)論:在 exec 執(zhí)行后的所產(chǎn)生的錯誤,即使事務(wù)中有某個/某些命令在執(zhí)行時產(chǎn)生了錯誤, 事務(wù)中的其他命令仍然會繼續(xù)執(zhí)行。

Redis 在事務(wù)失敗時不進(jìn)行回滾,而是繼續(xù)執(zhí)行余下的命令

Redis 這種設(shè)計原則是:Redis 命令只會因?yàn)殄e誤的語法而失敗(這些問題不能在入隊(duì)時發(fā)現(xiàn)),或是命令用在了錯誤類型的鍵上面,失敗的命令并不是?Redis?導(dǎo)致,而是由編程錯誤造成的,這樣錯誤應(yīng)該在開發(fā)的過程中被發(fā)現(xiàn),生產(chǎn)環(huán)境中不應(yīng)出現(xiàn)語法的錯誤。就是在程序的運(yùn)行環(huán)境中不應(yīng)該出現(xiàn)語法的錯誤。而 Redis 能夠保證正確的命令一定會被執(zhí)行。再者不需要對回滾進(jìn)行支持,所以 Redis 的內(nèi)部可以保持簡單且快速。

(4)?放棄事務(wù)

執(zhí)行步驟:

1)?MULTI?開啟事務(wù)

2)?SET?age?25 命令入隊(duì)

3)?SET age?30?命令入隊(duì)

4)?DISCARD?放棄事務(wù),則命令隊(duì)列不會被執(zhí)行

例 1:

(5)?Redis?的 watch?機(jī)制

1.?Redis?WATCH?機(jī)制

WATCH 機(jī)制原理:

WATCH 機(jī)制:使用 WATCH 監(jiān)視一個或多個 key?, 跟蹤 key 的 value 修改情況,如果有key 的value 值在事務(wù) EXEC 執(zhí)行之前被修改了,整個事務(wù)被取消。EXEC 返回提示信息,表示事務(wù)已經(jīng)失敗。

WATCH 機(jī)制使的事務(wù) EXEC 變的有條件,事務(wù)只有在被 WATCH 的 key 沒有修改的前提下才能執(zhí)行。不滿足條件,事務(wù)被取消。使用WATCH 監(jiān)視了一個帶過期時間的鍵,那么即使這個鍵過期了,事務(wù)仍然可以正常執(zhí)行

大多數(shù)情況下,不同的客戶端會訪問不同的鍵,相互同時競爭同一 key 的情況一般都很少,watch 能很好解決數(shù)據(jù)沖突的問題。

2.?何時取消 key?的監(jiān)視WATCH)?

①WATCH 命令可以被調(diào)用多次。對鍵的監(jiān)視從 WATCH 執(zhí)行之后開始生效,直到調(diào)用 EXEC 為止。不管事務(wù)是否成功執(zhí)行,對所有鍵的監(jiān)視都會被取消。

②當(dāng)客戶端斷開連接時,該客戶端對鍵的監(jiān)視也會被取消。

③UNWATCH 命令可以手動取消對所有鍵的監(jiān)視

3.?WATCH?的事例

執(zhí)行步驟:

首先啟動redis-server , 在開啟兩個客戶端連接。分別叫 A 客戶端和 B 客戶端。啟動 Redis 服務(wù)器

A?客戶端(紅色):WATCH?某個?key,同時執(zhí)行事務(wù)

B?客戶端(黃色):對?A?客戶端?WATCH?的?key?修改其value?值。

1)?在 A?客戶端設(shè)置 key?: str.lp?登錄人數(shù)為 10

2)?在 A?客戶端監(jiān)視 key?: str.lp

3)?在 A?客戶端開啟事務(wù) multi

4)?在 A?客戶端修改 str.lp?的值為 11

5)?在 B?客戶端修改 str.lp?的值為 15

6)?在 A?客戶端執(zhí)行事務(wù) exec

7)?在 A?客戶端查看 str.lp?值,A?客戶端執(zhí)行的事務(wù)沒有提交,因?yàn)?WATCH?的 str.lp?的值已經(jīng)被修改了,所有放棄事務(wù)。

例 1:樂觀鎖


如果想更深入的學(xué)習(xí)Redis,奉上Redis視頻教程,視頻學(xué)習(xí)效果更佳,走過路過別忘素質(zhì)三連哦~~


Redis超強(qiáng)入門指南—Redis事務(wù)的評論 (共 條)

分享到微博請遵守國家法律
堆龙德庆县| 卓尼县| 昌宁县| 齐齐哈尔市| 辰溪县| 东辽县| 明溪县| 宣威市| 永靖县| 山西省| 德保县| 陆丰市| 成安县| 景谷| 石嘴山市| 含山县| 嘉义县| 阿鲁科尔沁旗| 柳州市| 京山县| 定陶县| 三台县| 苏尼特右旗| 蒲城县| 常熟市| 崇信县| 榕江县| 抚远县| 吐鲁番市| 松原市| 北流市| 临沂市| 陇川县| 和平区| 涞源县| 赤城县| 三穗县| 瓮安县| 临猗县| 乌鲁木齐市| 遂昌县|