nodejs 運用redis cluster遇見的一些問題(隨記)

隨記起因

在最近的nodejs項目中運用到了redis,而且用了redis cluster。實際開發中發現redis單機跟集羣其實又挺大差別。

1.pipeline/multi問題

起因:原想批量執行redis操作,於是考慮到pipeline或者multi。在本地單機redis上操作沒有問題。但是到部署了redis集羣的服務器上測試就有部分操作結果返回"moved"。
經查閱ioredis的issue。#416以及#536中可以總結到,在集羣模式下,由於有多個slot,所以其實數據的key不一定在同一個slot下,所以無法使用multi或者pipeline這些批量操作(具體請進issue裏查閱以及相關資料)。
結果:有兩種解決方式:
1.參考876。修改ioredis源碼,這個不建議。坐等pr測試完成吧。
2.參考優酷土豆的Redis服務平臺化之路。其中心思想是找到key對應的slot,把同一slot的操作進行批量操作就行了。就譬如你有slotA,slotB,有key (1,2,3,4,5)。通過npm包cluster-key-slot計算出slot後,如(1,3,5)屬於slotA, (2,4)屬於slotB,那就把(1,3,5)放到一個pipeline,(2,4)放到一個pipeline操作。

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