使用redis處理大量數(shù)據(jù),一定會用到集群捏肢,一般有三種實現(xiàn)方式:
- 官方clusters:無中心化設(shè)計神得,不好升級沽损,缺乏最佳實踐。
- proxy分片:Codis是代表循头,通過Proxy節(jié)點對redis的訪問進(jìn)行路由绵估。擴(kuò)容容易,性能有開銷卡骂。
- 客戶端分片:實現(xiàn)簡單国裳,沒有額外開銷,擴(kuò)容和縮容需要手動調(diào)整分片規(guī)則全跨,運維復(fù)雜缝左。比如:Redis-rb 和 Predis。
談?wù)刢odis的實現(xiàn)。
怎樣分片渺杉?
Pre-Sharding蛇数,hash算法是crc32(key)%1024。為每個redis-group提供slots和redis的映射關(guān)系是越,這些信息保存在zk中(Proxy沒有狀態(tài))耳舅。這樣hash路由只和slots有關(guān),這樣擴(kuò)容無需rehash倚评,只需部分slots遷移浦徊,然后更新slots 和redis-group的映射關(guān)系。
Codis支持的MGET/MSET無法保證原本單點時的原子語義的原因天梧?
感謝:
Proxy-Style Redis集群設(shè)計
Codis作者黃東旭:細(xì)說分布式Redis架構(gòu)設(shè)計和那些踩過的坑
Redis技巧:分片技術(shù)和Hash Tag