事務(wù)
MULTI 、 EXEC 、 DISCARD 和 WATCH 是 Redis 事務(wù)相關(guān)的命令。事務(wù)可以一次執(zhí)行多個(gè)命令, 并且?guī)в幸韵聝蓚€(gè)重要的保證:
事務(wù)是一個(gè)單獨(dú)的隔離操作:事務(wù)中的所有命令都會(huì)序列化、按順序地執(zhí)行。事務(wù)在執(zhí)行的過(guò)程中,不會(huì)被其他客戶端發(fā)送來(lái)的命令請(qǐng)求所打斷。
事務(wù)是一個(gè)原子操作:事務(wù)中的命令要么全部被執(zhí)行,要么全部都不執(zhí)行。
EXEC 命令負(fù)責(zé)觸發(fā)并執(zhí)行事務(wù)中的所有命令:
如果客戶端在使用 MULTI 開(kāi)啟了一個(gè)事務(wù)之后,卻因?yàn)閿嗑€而沒(méi)有成功執(zhí)行 EXEC ,那么事務(wù)中的所有命令都不會(huì)被執(zhí)行。
另一方面,如果客戶端成功在開(kāi)啟事務(wù)之后執(zhí)行 EXEC ,那么事務(wù)中的所有命令都會(huì)被執(zhí)行。
當(dāng)使用 AOF 方式做持久化的時(shí)候, Redis 會(huì)使用單個(gè) write(2) 命令將事務(wù)寫(xiě)入到磁盤(pán)中。
然而,如果 Redis 服務(wù)器因?yàn)槟承┰虮还芾韱T殺死,或者遇上某種硬件故障,那么可能只有部分事務(wù)命令會(huì)被成功寫(xiě)入到磁盤(pán)中。
如果 Redis 在重新啟動(dòng)時(shí)發(fā)現(xiàn) AOF 文件出了這樣的問(wèn)題,那么它會(huì)退出,并匯報(bào)一個(gè)錯(cuò)誤。
使用redis-check-aof程序可以修復(fù)這一問(wèn)題:它會(huì)移除 AOF 文件中不完整事務(wù)的信息,確保服務(wù)器可以順利啟動(dòng)。
從 2.2 版本開(kāi)始,Redis 還可以通過(guò)樂(lè)觀鎖(optimistic lock)實(shí)現(xiàn) CAS (check-and-set)操作,具體信息請(qǐng)參考文檔的后半部分。Redis事務(wù)可以執(zhí)行一系列的腳本,并且?guī)в幸韵聝蓚€(gè)重要的保證:
批量的命令在Exec命令之前,事務(wù)中任意命令執(zhí)行失敗,其余的命令依然被執(zhí)行。在事務(wù)執(zhí)行過(guò)程,其他客戶端提交的命令請(qǐng)求不會(huì)插入到事務(wù)執(zhí)行命令序列中。
一個(gè)事務(wù)從開(kāi)始到執(zhí)行會(huì)經(jīng)歷以下三個(gè)階段:開(kāi)始-入隊(duì)-執(zhí)行。本文介紹下Redis事務(wù)的常用命令。
DISCARD取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令。命令的執(zhí)行如下所示。先選取一段命令,然后執(zhí)行該命令取消
Exec命令:執(zhí)行所有的腳本命令。事務(wù)塊內(nèi)所有命令的返回值,按命令執(zhí)行的先后順序排列。 當(dāng)操作被打斷時(shí),返回空值 nil 。
# 監(jiān)視 key ,且事務(wù)成功執(zhí)行??梢员O(jiān)控Key的值的變化以及執(zhí)行事務(wù)的執(zhí)行情況。
# 監(jiān)視 key ,且事務(wù)執(zhí)行中斷??梢员O(jiān)控事務(wù)的執(zhí)行情況,以及事務(wù)中斷的情況。
Redis Multi 命令。用于標(biāo)記一個(gè)事務(wù)塊的開(kāi)始。事務(wù)塊內(nèi)的多條命令會(huì)按照先后順序被放進(jìn)一個(gè)隊(duì)列當(dāng)中,輸入完成命令之后,輸入exec執(zhí)行命令。
UNwatch命令用于取消事務(wù)的監(jiān)視。當(dāng)輸入一個(gè)命令監(jiān)視時(shí),可以通過(guò)UNwatch命令,取消對(duì)命令的監(jiān)視。
您可能感興趣的文章:- PHP+Redis事務(wù)解決高并發(fā)下商品超賣(mài)問(wèn)題(推薦)
- redis中的事務(wù)操作案例分析
- Redis事務(wù)涉及的watch、multi等命令詳解
- python實(shí)現(xiàn)redis三種cas事務(wù)操作
- redis中事務(wù)機(jī)制及樂(lè)觀鎖的實(shí)現(xiàn)
- redis事務(wù)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Redis 基礎(chǔ)教程之事務(wù)的使用方法
- Redis 事務(wù)與過(guò)期時(shí)間詳細(xì)介紹
- 【Redis緩存機(jī)制】詳解Java連接Redis_Jedis_事務(wù)
- Redis教程(八):事務(wù)詳解
- Redis 事務(wù)知識(shí)點(diǎn)相關(guān)總結(jié)