在選擇緩存時,什麼時候選擇 redis,什麼時候選擇 memcached

選擇 redis 的情況:
1、複雜數據結構, value 的數據是哈希,列表,集合,有序集合等這種情況下,會選擇redis, 因為 memcache 無法滿足這些數據結構,最典型的的使用場景是,用戶訂單列表,用戶消息,帖子評論等。

2、需要進行數據的持久化功能,但是注意,不要把 redis 當成數據庫使用,如果 redis掛了,內存能夠快速恢復熱數據,不會將壓力瞬間壓在數據庫上,沒有 cache 預熱的過程。對於只讀和數據一致性要求不高的場景可以採用持久化存儲

3、高可用, redis 支持集群,可以實現主動複製,讀寫分離,而對於 memcache 如果想要實現高可用,需要進行二次開發。

4、存儲的內容比較大, memcache 存儲的 value 最大為 1M。

選擇 memcache 的場景:

1、純 KV,數據量非常大的業務,使用 memcache 更合適,原因是,

a)memcache 的內存分配採用的是預分配內存池的管理方式,能夠省去內存分配的時間, redis 是臨時申請空間,可能導致碎片化;

b)虛擬內存使用, memcache 將所有的數據存儲在物理內存裡, redis 有自己的 vm 機
制,理論上能夠存儲比物理內存更多的數據,當數據超量時,引發 swap,把冷數據刷新到磁盤上,從這點上,數據量大時, memcache 更快;

c)網絡模型, memcache 使用非阻塞的 IO 複用模型, redis 也是使用非阻塞的 IO 複用模型,但是 redis 還提供了一些非 KV 存儲之外的排序,聚合功能,複雜的 CPU 計算,會阻塞整個 IO 調度,從這點上由於 redis 提供的功能較多, memcache 更快些;

d) 線程模型, memcache 使用多線程,主線程監聽, worker 子線程接受請求,執行讀寫,這個過程可能存在鎖衝突。 redis 使用的單線程,雖然無鎖衝突,但是難以利用多核的特性提升吞吐量。


分享到:


相關文章: