鍍金池/ 問答/人工智能/ redis 單進(jìn)程單線程 怎么對事務(wù)卻沒有串行化?

redis 單進(jìn)程單線程 怎么對事務(wù)卻沒有串行化?

redis既然是單進(jìn)程單線程的, 那么不管多少客戶端連接上來進(jìn)行操作, redis服務(wù)端應(yīng)該都是一個個串行執(zhí)行;

在網(wǎng)上看到有些資料:

事務(wù)執(zhí)行期間,Redis不會再為其它客戶端的請求提供任何服務(wù),從而保證了事物中的所有命令被原子的執(zhí)行

但事實上, 到了事務(wù)并發(fā)執(zhí)行起來, 還要結(jié)合watch, 不應(yīng)該是串行的么? 事務(wù)A開始后,即使有事務(wù)B也是排在事務(wù)A之后啊, 為啥還要結(jié)合watch?

回答
編輯回答
爛人
2017年10月18日 04:46
編輯回答
小眼睛

因為當(dāng)多個client端同時發(fā)送命令時,redis處理命令的順序是不確定的.
如A事務(wù)中有c,d,e三個命令,B事務(wù)中h,l兩個命令,當(dāng)兩個客戶端同時發(fā)送給redis時,redis可能先執(zhí)行c,然后又執(zhí)行了h,順序可能變成 c->h->d->l->e.而期望的順序是c->d->e->h->l.因此只有redis在事務(wù)執(zhí)行期間,不再響應(yīng)其他客戶端請求,才能保證一個客戶端上的事務(wù)完整按序執(zhí)行.

2017年8月19日 13:14