redis和memcached選擇,對比分析


   memcache和redis是互聯網分層架構中,最常用的KV緩存。不少同學在選型的時候會糾結,到底是選擇memcache還是redis?

   memcache提供的功能是redis提供的功能的子集,不用想太多,選redis准沒錯?

   

redis傾向:

   復雜的數據結構:value是哈希,列表,集合,有序集合這類復雜的數據結構時,會選擇redis,因為mc無法滿足這些需求。用戶訂單列表,用戶消息,帖子評論列表等。

   持久化: mc無法滿足持久化的需求,只得選擇redis。但是千萬不要把redis真的做數據庫用

                     a. redis的定期快照不能保證數據不丟失

                     b.redis的AOF會降低效率,並且不能支持太大的數據量

                     c.不要期望redis做固化存儲會比mysql做得好,不同的工具做各自擅長的事情

                     d.redis掛掉重啟后能夠快速恢復熱數據,但是如果着期間有數據修改,可能導致數據不一致,因此,只讀場景,或者允許一些不一致的業務場景,可以嘗試開啟redis的固化功能

   自帶高可用集群: redis自身支持集群,實現主從讀寫分離功能,官方也提供sentinal哨兵的集群管理工具,實現主從監控,故障轉移,memcached實現集群需要二次開發了

                            但是很多時候需要考慮,真的需要高可用么?緩存很多時候是運行cache miss的,cache掛了可以讀db的

  存儲的內容比較大 : macache 單個value最大存儲 1M,超過1M只能用redis了。

            注意:純的k-v 而且數據量特別大,並發也很大 或許使用memcache更合適

                      a.內存分配:memcache使用 預分配內存池的煩事管理內存,更節省內存分配時間,redis使用臨時申請的方式,kennel導致碎片。對比看memcache更快一點

                      b.memcache把所有的數據存儲在物理內存里。redis有自己的VM機制,理論上能夠存儲比物理內存更多的數據,當數據超量時,會引發swap,把冷數據刷到磁盤上。對比看數據量大時,memcache更快一點

                      c.memcache使用非阻塞IO復用模型,redis也是使用非阻塞IO復用模型,但由於redis還提供一些非KV存儲之外的排序,聚合功能,在執行這些功能時,復雜的CPU計算,會阻塞整個IO調度。從這一點上,由於redis提供的功能較多,mc會更快一些。

                      d.memcache使用多線程,主線程監聽,worker子線程接受請求,執行讀寫,這個過程中,可能存在鎖沖突。redis使用單線程,雖無鎖沖突,但難以利用多核的特性提升整體吞吐量。從這一點上,mc會快一些。

 

    代碼可讀性,代碼質量:看過mc和redis的代碼,從可讀性上說,redis是我見過代碼最清爽的軟件,甚至沒有之一,或許簡單是redis設計的初衷,編譯redis甚至不需要configure,不需要依賴第三方庫,一個make就搞定了。而memcache,可能是考慮了太多的擴展性,多系統的兼容性,代碼不清爽,看起來費勁。

  

  

   

 

                 

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM