1. 程式人生 > >redis中的流水線操作和事務

redis中的流水線操作和事務

流水線(pipeline)

redis作為快取使用可以幫助我們提高系統性能,但是redis本身也可以進一步優化,操作redis命令時,通過批量操作命令(例如mget,mset等),但大多數的命令是不支援批量操作的,這時如果一組操作無先後結果上的依賴,可以把這組操作放在流水線裡(pipeline)一塊提交,減少與redis伺服器的互動次數,從而達到一定的效能提升。這裡需要注意的是一組操作的提交如果其中有的命令錯誤,並不會影響其他的操作,如下:


很明顯上面程式碼第四行的操作是錯誤的,但並不影響其他操作,通過在命令列執行如下操作,ab和abc的鍵已經存在。

事務

redis事務並不像資料庫事務一樣在出現異常時可以回滾,redis的事務在出現錯誤時並不會影響其他命令,與流水線有點類似,事務以multi開始,中間所有的命令都會排隊,用exec提交事務,一般事務與watch結合使用,當貝watch的鍵在事務提交之前被其他客戶端修改了值,那麼這個事務是不會執行的,如下客戶端的自增操作在執行exec之前,導致客戶端一事務裡的操作都未執行

                                

                   客戶端一                                                                                    客戶端二