redis c++ 開發注意事項

redis c++ 開發注意事項

現象

在多個線程通過同一個連接給redis-server發送命令時,會有概率出現某個線程發送的命令接收不到的情況

問題分析

調用redisCommand函數會通過redisGetReply獲取命令結果,而redisGetReply會直到recv返回空纔會返回,所以,當一個線程調用redisGetReply時,另一個線程的結果剛好也返回,那麼本線程的redisGetReply會把所有命令結果全部讀取出來,等另一個線程再調用redisGetReply時,就獲取不到結果了。

解決方法

在多線程對同一個redis連接調用redisCommand函數時加上一個同步鎖,這就避免出現一個線程發送的命令被其他線程獲取的問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章