Redis管道與事務(wù)

簡介

管道技術(shù)由客戶端提供的,與服務(wù)器無關(guān),服務(wù)器始終使用,收到-執(zhí)行-回復(fù)的順序處理消息。而客戶端通過對管道中的指令列表改變讀寫順序,而節(jié)省大幅IO時間,指令越多,效果越好。
管道測試:reids-benchmark(-p )

管道可以將多個命令大包,一次性發(fā)送給服務(wù)器處理(類似于批處理)

事務(wù)

  • redis事務(wù)指令:multl、exec、discard,雖然可以使用DISCARD取消事務(wù),但是不支持回滾
  • 當(dāng)輸入multl命令后,服務(wù)器返回OK表示事務(wù)開始成功,然后依次輸入需要在本次事務(wù)中執(zhí)行的所有命令,每次輸入一個命令服務(wù)器并不會馬上執(zhí)行,而是返回"QUEUED",表示命令已經(jīng)被服務(wù)器接收并且暫時保存起來,最后輸入exec命令后,本次事務(wù)中的所有命令才會被依次執(zhí)行。
  • 事務(wù)錯誤處理:
    1.語法錯誤,全部執(zhí)行
    2.運行錯誤,出錯后仍然繼續(xù)執(zhí)行

事務(wù)監(jiān)測

  • 將其中一個條命令的執(zhí)行結(jié)果作為另外一條命令的執(zhí)行參數(shù),如i++,需要使用watch命令
  • watch命令可以監(jiān)控一個或多個鍵,一旦其中有一個鍵被修改或刪除,之后的事務(wù)就不會執(zhí)行,監(jiān)控一直持續(xù)到exec命令執(zhí)行
  • 執(zhí)行exec命令后會取消監(jiān)控使用watch命令監(jiān)控的鍵,如果不想執(zhí)行事務(wù)中的命令,也可以使用unwatch命令來取消監(jiān)控
  • 使用方式 watch -> multl -> command -> exec

注意: 由于watch命令的作用只是當(dāng)被監(jiān)控的鍵被修改后取消之后的事務(wù),并不能保證其他客戶端不修改監(jiān)控的值,所以當(dāng)exec命令執(zhí)行失敗之后需要手動重新執(zhí)行整個事務(wù)(本質(zhì)上是一種樂觀鎖)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容