redis優勢這麼多,爲什麼沒有吧memcache幹掉?

用戶5547794389


兩者雖然有著子集的關係,但不得不說還有存在很多不同,而且彼此不能互相替代。就像有些面試官會問你【

為什麼要使用redis】的問題,也是因為有些場合,是根本不需要用到redis,或者說沒必要用到哦。

簡單說,這兩者都是基於內存的數據緩存系統,我認為memcache實現的存儲功能是redis的子集,即memcache能實現的存儲,redis也能做到,但反之則不行。

比如說,memcache只支持簡單的key/value數據結構,但是redis除了String外,還支持list、dict、set、zset、hyperloglog等等數據結構的存儲。

其他的類似redis的持久化、redis的讀寫效率、redis的快照功能,都是比memcache要強大且完善的功能,但為何memcache還是存在,且有很多項目還是使用呢?

其主要的原因,在我看來,是因為場景的需要,比如:

1)項目中使用緩存存儲時,只會對String數據結構進行存儲,但redis在存儲String類型時,會耗費更多的內存,我們需要對數據轉換為dict來進行存儲的壓縮,從而減低內存損耗,在這種情況下,我會優先考慮memcache。

2)redis只支持單線程,其性能受限於CPU性能,即取決於數據結構、數據大小以及服務器硬件性能,其在日常環節中的QPS高峰約為1-2w,而memcache具有多核優勢,其單實例的吞吐量極高,性能主要取決於存儲的key及value的字節大小以及服務器硬件性能,其在日常環節中的QPS高峰約為4-6w。(但有意思的時,即使如此,memcache的性能比起redis,在實際業務中並沒有好多少,但如果看過源碼的人會發現,redis的源碼及其精緻!而memcache的源碼則稍顯臃腫,可能這一塊也會有一定的影響呢?)


總的說:一昧的使用redis來進行數據緩存系統,並不是最佳的選擇,如果項目根本就不需要複雜的數據結構呢?如果項目的數據只有一小部分使用了緩存,根本不需要使用持久化和備份呢?如果項目不需要在服務器之間進行數據同步呢?在諸如此類情況下,使用redis反而是增加項目成本,殺雞焉用宰牛刀~


——沒事待在家裡不出門的 居家程序員 敲上。(我不想脫髮!)


居家程序員


顯示Memcache和Redis區別介紹:

在Redis中,並不是所有的數據都一直存儲在內存中的,這是和Memcache相比一個最大的區別之一的。

還有這個Redis在很多方面具備數據庫的特徵的,或者說就是一個數據庫系統,而Memcache只是簡單的K/V緩存的。

他們的擴展都需要做集群;實現方式:master-slave、Hash的。,不過在100k以上的數據中,Memcache性能要高於Redis的。

還有的話如果要說內存使用效率的話,使用簡單的key-value存儲的話,Memcached的內存利用率更高的。

而如果Redis採用hash結構來做key-value存儲的,由於其組合式的壓縮,其內存利用率會高於Memcache。所以當然,這和你的應用場景和數據特性有關的的。

如果你對數據持久化和數據同步有所要求,那麼推薦你選擇Redis的,因為這兩個特性Memcache都不具備的。

所以即使你只是希望在升級或者重啟系統後緩存數據不會丟失的,選擇Redis也是明智的選擇得的。

還有雖然這個Redis和Memcache在寫入性能上面差別不大的,讀取性能上面尤其是批量讀取性能上面Memcache更強的。

以上區別說明:memcache還是有可取之處的!!!

總結一下的::

最後這個Memcache:Memcache可以利用多核優勢的,單實例吞吐量極高的,可以達到幾十萬QPS,適用於最大程度扛量的的。

他的話只支持簡單的key/value數據結構的,不像Redis可以支持豐富的數據類型的。

無法進行持久化,數據不能備份,只能用於緩存使用,而且且重啟後數據全部丟失的。。。。


分享到:


相關文章: