Redis的multi(事務)和pipeline(管道)

redis的multi函數有兩種模式

Redis::MULTI或Redis::PIPELINE,默認Redis::MULTI

Redis::MULTI 將多個操作當做一個事務執行,多個命令依次發給服務端,用服務端緩衝,最後由EXEC執行。保證原子性,效率低

Redis::PIPELINE 將多條命令一次性的發給服務端,多個命令寫在客戶端,客戶端緩衝,一次性發給服務端,最後由EXEC執行。沒有原子性保證,效率高,pipeline效率明顯提升。

#multi函數的寫法(重點是管道的使用)
$pile = $this->getRedis()->multi(Redis::PIPELINE);
//或者$pipe = $this->getRedis()->pipeline();這取決於所用的redis擴展

//多條命令
$pipe->set();
$pipe->set();
$pipe->set();
//執行
$pipe->exec();

Redis事務是不支持回滾的。

  • 事務在執行 EXEC 之前,入隊的命令可能會出錯。比如說,命令可能會產生語法錯誤(參數數量錯誤,參數名錯誤,等等),或者其他更嚴重的錯誤,比如內存不足(如果服務器使用 maxmemory 設置了最大內存限制的話)。
  • 命令可能在 EXEC 調用之後失敗。舉個例子,事務中的命令可能處理了錯誤類型的鍵,比如將列表命令用在了字符串鍵
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章