簡介
管道技術(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ì)上是一種樂觀鎖)