redis事務(wù)執(zhí)行常用命令及watch監(jiān)視詳解
redis事務(wù)
注意:我使用的版本是6.0.10,不同版本可能略有差別
redis事務(wù)就是一組命令的集合,一個(gè)事務(wù)中所有命令都會(huì)序列化,按順序的串行化執(zhí)行而不會(huì)被其他命令插入
- Redis的事務(wù)僅僅是保證事務(wù)里的操作會(huì)被連續(xù)獨(dú)占的執(zhí)行,因?yàn)槭菃尉€程架構(gòu),在執(zhí)行完事務(wù)內(nèi)所有指令前是不可能再去同時(shí)執(zhí)行其他客戶端的請(qǐng)求的
- Redis的事務(wù)沒有隔離級(jí)別的概念,因?yàn)槭聞?wù)提交前任何指令都不會(huì)被實(shí)際執(zhí)行,也就不存在事務(wù)內(nèi)的查詢要看到事務(wù)里的更新,在事務(wù)外查詢不能看到這種問題了
- Redis的事務(wù)不保證原子性,也就是不保證所有指令同時(shí)成功或同時(shí)失敗,只有決定是否開始執(zhí)行全部指令的能力,沒有執(zhí)行到一半進(jìn)行回滾的能力
事務(wù)的常用命令
- multi 標(biāo)記一個(gè)事務(wù)塊的開始,后續(xù)命令逐個(gè)放入隊(duì)列中
- exec 執(zhí)行事務(wù)塊的命令
- discard 取消事務(wù),丟棄事務(wù)塊的命令
- watch key [key ...] 監(jiān)視key,如果在事務(wù)執(zhí)行之前,這個(gè)key被其他命令所改動(dòng),則事務(wù)中斷
- unwatch 取消監(jiān)視所有key
事務(wù)的執(zhí)行
#標(biāo)注事務(wù)的開始 MULTI OK #在事務(wù)內(nèi)部的操作全是入隊(duì),不會(huì)真正執(zhí)行 set tran1 v1 QUEUED set tran2 v2 QUEUED #執(zhí)行 exec 1) OK 2) OK
redis的事務(wù)沒有隔離級(jí)別的概念,并且不會(huì)保證原子性
- 如果任何一個(gè)命令語(yǔ)法有錯(cuò),Redis會(huì)直接返回錯(cuò)誤,所有的命令都不會(huì)執(zhí)行
- 如果某個(gè)命令執(zhí)行錯(cuò)誤,那么其它的命令仍然會(huì)正常執(zhí)行,然后在執(zhí)行后返回錯(cuò)誤信息
- Redis不提供事務(wù)回滾的功能,開發(fā)者必須在事務(wù)執(zhí)行出錯(cuò)后,自行恢復(fù)數(shù)據(jù)庫(kù)狀態(tài)
watch監(jiān)視
watch指令類似于樂觀鎖,在事務(wù)開始之前使用,如果在watch之后有任何所監(jiān)視的key發(fā)生變化,exec指令所執(zhí)行的事務(wù)將會(huì)被放棄,當(dāng) EXEC 被調(diào)用后,所有的之前被監(jiān)視的鍵值會(huì)被取消監(jiān)視,不管事務(wù)是否被取消或者執(zhí)行。并且當(dāng)客戶端連接丟失的時(shí)候,所有東西都會(huì)被取消監(jiān)視
#設(shè)值 set balance 100 OK #監(jiān)視 watch balance OK #修改 set balance 200 OK get balance "200" #開啟事務(wù) MULTI OK #修改入隊(duì) DECRBY balance 10 QUEUED #執(zhí)行失敗 exec (nil) get balance "200"
redis只能保證事務(wù)中的操作順序執(zhí)行,但是如果事務(wù)中有一條命令失敗了,并不會(huì)回滾其他命令
以上就是redis事務(wù)執(zhí)行常用命令及watch監(jiān)視詳解的詳細(xì)內(nèi)容,更多關(guān)于redis事務(wù)執(zhí)行watch監(jiān)視的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Redis瞬時(shí)高并發(fā)秒殺方案總結(jié)
本文講述了Redis瞬時(shí)高并發(fā)秒殺方案總結(jié),具有很好的參考價(jià)值,感興趣的小伙伴們可以參考一下,具體如下:2018-05-05Redis 多規(guī)則限流和防重復(fù)提交方案實(shí)現(xiàn)小結(jié)
本文主要介紹了Redis 多規(guī)則限流和防重復(fù)提交方案實(shí)現(xiàn)小結(jié),包括使用String結(jié)構(gòu)和Zset結(jié)構(gòu)來記錄用戶IP的訪問次數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02基于Redis實(shí)現(xiàn)短信驗(yàn)證碼登錄功能
對(duì)于我們用戶來講,我們?cè)诘顷懸粋€(gè)APP的時(shí)候,有很多種登陸方式,比如"微信掃碼"、"手機(jī)號(hào)登陸"、"支付寶掃碼"、"賬號(hào)密碼登錄",現(xiàn)在大多都會(huì)要求微信掃碼登錄或者是手機(jī)號(hào)驗(yàn)證碼登錄,所以本文給大家介紹了基于Redis實(shí)現(xiàn)短信驗(yàn)證碼登錄功能,需要的朋友可以參考下2025-01-01詳解redis緩存與數(shù)據(jù)庫(kù)一致性問題解決
這篇文章主要介紹了詳解redis緩存與數(shù)據(jù)庫(kù)一致性問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03多維度深入分析Redis的5種基本數(shù)據(jù)結(jié)構(gòu)
此篇文章主要對(duì)Redis的5種基本數(shù)據(jù)類型,即字符串(String)、列表(List)、散列(Hash)、集合(Set)、有序集合(Sorted?Set),從使用場(chǎng)景和底層結(jié)構(gòu)出發(fā),進(jìn)行多維度深入分析。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11