1. 程式人生 > >Memcache與Redis有什麽區別?

Memcache與Redis有什麽區別?

oca 如果 http log 分享圖片 但是 emc 相關操作 分數

Redis 和 Memcache 都是基於內存的數據存儲系統。Memcached是高性能分布式內存緩存服務,其本質上就是一個內存key-value數據庫。Redis是一個開源的key-value存儲系統。與Memcached類似,Redis將大部分數據存儲在內存中,支持的數據類型包括:字符串、哈希表、鏈表、集合、有序集合以及基於這些數據類型的相關操作。那麽,Memcache與Redis有什麽區別呢?讓我們一起來看一下。
技術分享圖片
1、數據操作不同
與Memcached僅支持簡單的key-value結構的數據記錄不同,Redis支持的數據類型要豐富得多。Memcached基本只支持簡單的key-value存儲,不支持枚舉,不支持持久化和復制等功能。Redis支持服務器端的數據操作相比Memcached來說,擁有更多的數據結構和並支持更豐富的數據操作,支持list、set、sorted set、hash等眾多數據結構,還同時提供了持久化和復制等功能。而通常在Memcached裏,使用者需要將數據拿到客戶端來進行類似的修改再set回去,這大大增加了網絡IO的次數和數據體積。在Redis中,這些復雜的操作通常和一般的GET/SET一樣高效。所以,如果需要緩存能夠支持更復雜的結構和操作, Redis會是更好的選擇。

2、內存管理機制不同
在Redis中,並不是所有的數據都一直存儲在內存中的。這是和Memcached相比一個最大的區別。當物理內存用完時,Redis可以將一些很久沒用到的value交換到磁盤。Redis只會緩存所有的key的信息,如果Redis發現內存的使用量超過了某一個閥值,將觸發swap的操作,Redis根據“swappability = age*log(size_in_memory)”計算出哪些key對應的value需要swap到磁盤。然後再將這些key對應的value持久化到磁盤中,同時在內存中清除。這種特性使得Redis可以保持超過其機器本身內存大小的數據。
技術分享圖片
而Memcached默認使用Slab Allocation機制管理內存,其主要思想是按照預先規定的大小,將分配的內存分割成特定長度的塊以存儲相應長度的key-value數據記錄,以完全解決內存碎片問題。

從內存利用率來講,使用簡單的key-value存儲的話,Memcached的內存利用率更高。而如果Redis采用hash結構來做key-value存儲,由於其組合式的壓縮,其內存利用率會高於Memcached。
3、性能不同
由於Redis只使用單核,而Memcached可以使用多核,所以平均每一個核上Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis,雖然Redis也在存儲大數據的性能上進行了優化,但是比起Memcached,還是稍有遜色。
4、集群管理不同
Memcached是全內存的數據緩沖系統,Redis雖然支持數據的持久化,但是全內存畢竟才是其高性能的本質。作為基於內存的存儲系統來說,機器物理內存的大小就是系統能夠容納的最大數據量。如果需要處理的數據量超過了單臺機器的物理內存大小,就需要構建分布式集群來擴展存儲能力。
Memcached本身並不支持分布式,因此只能在客戶端通過像一致性哈希這樣的分布式算法來實現Memcached的分布式存儲。相較於Memcached只能采用客戶端實現分布式存儲,Redis更偏向於在服務器端構建分布式存儲。
小結:Redis和Memcached哪個更好?
Redis更多場景是作為Memcached的替代者來使用,當需要除key-value之外的更多數據類型支持或存儲的數據不能被剔除時,使用Redis更合適。如果只做緩存的話,Memcached已經足夠應付絕大部分的需求,Redis 的出現只是提供了一個更加好的選擇。總的來說,根據使用者自身的需求去選擇才是最合適的。

目前,華為雲有最新活動,數據庫年中鉅惠!需要親自實踐的朋友可以了解一下~
https://activity.huaweicloud.com/dcs_midyear/index.html

Memcache與Redis有什麽區別?