?
Redis中的Watch命令用于監視一個(gè)或多個(gè)鍵,如果在事務(wù)執行之前這些鍵的值發(fā)生了變化,那么事務(wù)將被中斷,Watch命令可以用于實(shí)現樂(lè )觀(guān)鎖,確保在并發(fā)環(huán)境下數據的一致性。
1、客戶(hù)端使用WATCH命令監視一個(gè)或多(′▽?zhuān)?個(gè)鍵;
2、如果被監視的鍵在事(′?`)務(wù)執行之前發(fā)生了改變,那么??事務(wù)將被中斷;
3、如果(′▽?zhuān)?)被監視的鍵在(zai)事務(wù)執行期間發(fā)生了改變,那么事務(wù)不會(huì )被中斷,但可能會(huì )讀取到舊值;
4、使用UNWATCH命(′ω`*)令取消對所有鍵的監視。
> WATCH key1 key2 key3OK> MULTIOK> SET key1 value1QUEUED> SET key2 value2QUEUED> EXEC1) OK2) OK
在這個(gè)示例中,我們首先使用WATCH命令監視了key1、key2和key3三個(gè)??鍵,我們嘗試在一個(gè)事務(wù)中修改這三個(gè)鍵的值(zhi),由于key1和(he)key2在事務(wù)開(kāi)始之前沒(méi)有被修改,所以它們的值被成功設置,由于ke(′_`)y3在事務(wù)開(kāi)始之前已經(jīng)被修改,所以它的值沒(méi)有被設置,我們使用EXEC命令提交事務(wù)。
問(wèn)題1:如果一個(gè)鍵在事務(wù)執行期間被其他客戶(hù)端修改了??,那么事務(wù)會(huì )如何處理?
答案:如果一個(gè)鍵在事務(wù)執行期間被其他客戶(hù)端修(xiu)改了,那么事務(wù)不會(huì )因為該鍵的??修改而中斷,事務(wù)可能會(huì )讀取到舊值,因為它是在修改操作之前的狀態(tài)上執行的,為了避免這種情況,可??以使用樂(lè )觀(guān)鎖機制來(lái)??確(que)保數據的一致性。
問(wèn)題2:如何取消所有已監視( ?ω?)的鍵?
答案:使用UNWATCH命令可以取消所有已監視的鍵,執行UNW??ATCH命令將取消所有先前使用WATCH命令監視的鍵。