日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

如果你了解過關(guān)系型數(shù)據(jù)庫(kù)事務(wù)的話,相信這篇文章對(duì)你來說是很容易理解的了。具體什么是事務(wù)我就不說不多了,直接講 redis 事務(wù)相關(guān)的部分。

首先,我們先來看下,Redis 是怎么執(zhí)行事務(wù)的。

1. 事務(wù)執(zhí)行過程

show code:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set a test1
QUEUED
127.0.0.1:6379> set b test2
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
127.0.0.1:6379> get a
"test1"
127.0.0.1:6379> get b
"test2"

一個(gè)事務(wù)的開始到結(jié)束會(huì)經(jīng)過以下 3 個(gè)過程

  1. 事務(wù)開始
  2. 命令入隊(duì)
  3. 事務(wù)執(zhí)行

結(jié)合上面的例子,用人話介紹這 3 個(gè)過程就是:

Redis 執(zhí)行 multi 命令標(biāo)志事務(wù)開始。

當(dāng)客戶端切換至事務(wù)狀態(tài)后,服務(wù)端會(huì)將除了 exec、discard(取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令)、watch 和 multi 以外的命令放進(jìn)一個(gè)先進(jìn)先出的事務(wù)隊(duì)列中。即上面例子的 2 個(gè) set 命令會(huì)被放進(jìn)隊(duì)列,并返回 QUEUED 給客戶端。

當(dāng)客戶端發(fā)送 exec 命令時(shí),服務(wù)端會(huì)立即執(zhí)行該命令。遍歷這個(gè)客戶端的事務(wù)隊(duì)列,執(zhí)行隊(duì)列保存的所有命令。最后將執(zhí)行命令所得結(jié)果返回給客戶端。

2. Redis 事務(wù)和關(guān)系型事務(wù)的區(qū)別

兩者最大區(qū)別就是 Redis 事務(wù)不支持回滾。即使事務(wù)隊(duì)列中某個(gè)命令在執(zhí)行期間發(fā)生了錯(cuò)誤,事務(wù)也會(huì)繼續(xù)執(zhí)行,直到事務(wù)隊(duì)列中所有命令執(zhí)行完成。

文字貌似不夠直觀,沒事,看下面的例子你就馬上明白了。

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set msg test
QUEUED
127.0.0.1:6379> lpop msg
QUEUED
127.0.0.1:6379> exec
1) OK
2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> get msg
"test"      // 不受后面錯(cuò)誤命令影響

PS:如果客戶端向事務(wù)入列一個(gè)錯(cuò)誤的命令(比如輸入一個(gè)不存在的命令,像:sett 命令),那么該事務(wù)將不被服務(wù)端執(zhí)行。該情況是入隊(duì)錯(cuò)誤,上面例子是執(zhí)行錯(cuò)誤的情況。

3. watch

提到 redis 事務(wù),就不得不提 watch 命令了。

該命令是一個(gè)樂觀鎖,只能在客戶端進(jìn)入事務(wù)狀態(tài)之前執(zhí)行。

作用是 exec 命令執(zhí)行之前,監(jiān)視任何數(shù)量個(gè)鍵,并在 exec 命令執(zhí)行時(shí),檢查被監(jiān)視的鍵是否至少有一個(gè)已經(jīng)被修改過。若是則拒絕執(zhí)行事務(wù),否則執(zhí)行。

當(dāng) exec 執(zhí)行完成后,這次事務(wù)也就結(jié)束了。

我們依舊來看一個(gè)簡(jiǎn)單的栗子:

127.0.0.1:6379> SET msg test  //設(shè)置 msg 的值
OK
127.0.0.1:6379> WATCH msg //監(jiān)視 msg
OK
127.0.0.1:6379> SET msg test2 //修改 msg 的值(或其他客戶端在該客戶端執(zhí)行 exec 命令之前修改該值)
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> SET msg test3
QUEUED
127.0.0.1:6379> GET msg
QUEUED
127.0.0.1:6379> EXEC 
(nil)   //執(zhí)行失敗

 

原文地址:
https://www.cnblogs.com/czd-xi/p/16071242.html

分享到:
標(biāo)簽:事務(wù) Redis
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定