什么時候使用redis?什么時候使用memcache?


要清楚為什么,redis具有高可用特性,並且可固化,但特性有時候不能成為選擇他的理由,一些業務場景中並不需要這樣的特性。
 
什么時候傾向於選擇redis?
1.復雜數據結構
value是哈希,列表,集合,有序集合等復雜數據結構的時候,選擇redis更合適,因為mc無法滿足這樣的需求。
典型場景:用戶消息,評論,訂單列表等
 
2.持久化
mc不支持持久化
但redis持久化的使用需要注意
 
千萬不要將redis作為數據庫來使用:
1)redis的定期快照不能保證數據不丟失
2)redis的AOF會降低效率,並且不能支持太大的數據量
 
緩存場景,開啟持久化有什么利弊?
優點:down機重啟,內存中能夠快速恢復熱點數據,分擔數據庫壓力,沒有cache預熱過程
缺點:redis掛了以后,數據庫中數據有修改,可能導致redis中數據不一致
只讀場景,或者一些允許不一致的業務場景,可以嘗試開啟redis持久化功能
 
3.天然高可用
redis天然支持集群功能,可實現主從復制,讀寫分離
Redis官方提供了sentinel集群管理工具,能夠實現主從服務監控,故障自動轉移
 
Mc想要實現高可用,需要進行二次開發
 
需要注意的是,大部分業務場景,緩存真的需要高可用嗎?
1)存場景,很多時候,是允許cache miss
2)緩存掛了,很多時候可以通過DB讀取數據
 
4.存儲的value很大
mc的value存儲,最大為1m,如果存儲的value很大,只能使用redis
 
什么時候傾向於選擇memcache?
純kv,數據量非常大,並發量非常大的業務,使用mc或許更合適
 
這個要從mc與redis的底層實現機制說起
 
內存分配
mc使用預分配內存池的方式管理,能夠省去內存分配的時間
redis是臨時申請空間,可能導致碎片
這一點上,mc會快一些
 
虛擬內存使用
mc會把所以數據存到物理內存中
redis有自己的vm機制,當數據超量時,會引發swap,把冷數據刷到磁盤上
數據量大時,mc會快一些
 
網絡模型
mc使用的是非阻塞IO復用模型,redis也是非阻塞IO復用模型
redis還提供一些非kv存儲之外的排序,聚合功能,在執行這些功能的時候,會阻塞整個IO調度
在這一點上,由於redis提供的功能較多,mc會快一些
 
線程模式
mc使用多線程,主線程監聽,worker子線程接受請求,執行讀寫,可能存在鎖沖突。
redis使用單線程模式,不存在鎖沖突,但難以利用多核的特效提升整體吞吐量。
在這一點上,mc要快一些
 
 


免責聲明!

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



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