瞭解Redis 和 Memcached 的區別
具體有以下幾點:
- 數據類型支持不同
與Memcached僅支持簡單的key-value結構的數據記錄不同,Redis支持的數據類型要豐富得多。最爲常用得數據類型主要有 五種:
String(字符串)
,Hash(哈希)
,List(列表)
,Set(集合)
和Sorted Set(有序集合)
. Redis內部使用一個redisObject對象來表示所有得key和value;
- 內存的管理機制不同
在redis中,並不是所有的數據一直存儲在內存中的。這是和Memcached相比一個最大的區別。當物理內存用完時,Redis可以將一些很久沒用到的value交換到磁盤中。Redis直會緩存所有的key的信息,如果Redis發現內存中的使用超過某一閾值,。將出發swap的操作。Redis計算出哪些key對應的value需要swap到磁盤,然後再將這些key對應的value持久化到磁盤中,同時再內存中清除。
- 數據持久化支持
Redis雖然時基於內存的存儲系統,當時他本身是支持數據持久化的,而且提供了兩種主要的持久化策略:
- RDB快照
- AOF日誌。
而Memcached是不支持數據持久化操作的
- 集羣管理的不同
Memcached是全內存的數據緩衝系統,Redis雖然支持數據持久化,但是全內存畢竟纔是其提高性能的根本。作爲基於內存的存儲系統來說,機器物理內存的大小就是系統能夠容納的最大數據量。如果需要處理的數據量超過了單臺機器的物理內存的大小。就需要構建分佈式集羣來擴展存儲能力。
總結
- Redis支持服務器端的數據操作:Redis相比Memcached來說,擁有更多的數據結構和並支持更豐富的數據操作,通常在 Memcached裏,你需要將數據拿到客戶端來進行類似的修改再set回去。這大大增加了網絡IO的次數和數據體積。在Redis中,這些複雜的操作通常和一般的GET/SET一樣高效。所以,如果需要緩存能夠支持更復雜的結構和操作,那麼Redis會是不錯的選擇。
- 內存使用效率對比:使用簡單的key-value存儲的話,Memcached的內存利用率更高,而如果Redis採用hash結構來做key-value存儲,由於其組合式的壓縮,其內存利用率會高於Memcached。
- 性能對比:由於Redis只使用單核,而Memcached可以使用多核,所以平均每一個核上Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis,雖然Redis最近也在存儲大數據的性能上進行優化,但是比起Memcached,還是稍有遜色。