相同點 都是基於記憶體的數據存儲系統redis 和 memcached 的區別 1.1redis 支持 豐富的數據類型 string hash list set 有序集合 1.2.memcached 只支持 string 2.1 redis支持持久化操作 RDB快照 Redis支持將當前數據的快照存成 ...
相同點
都是基於記憶體的數據存儲系統
redis 和 memcached 的區別
1.1redis 支持 豐富的數據類型 string hash list set 有序集合
1.2.memcached 只支持 string
2.1 redis支持持久化操作
RDB快照
Redis支持將當前數據的快照存成一個數據文件的持久化機制,即RDB快照。
RDB有他的不足,就是一旦資料庫出現問題,那麼我們的RDB文件中保存的數據並不是全新的,從上次RDB文件生成到Redis停機這段時間的數據全部丟掉了。在某些業務下,這是可以忍受的。
AOF日誌
AOF日誌的全稱是append only file,它是一個追加寫入的日誌文件。
與一般資料庫的binlog不同的是,AOF文件是可識別的純文本,它的內容就是一個個的Redis標準命令。
對於一般性的業務需求,建議使用RDB的方式進行持久化,原因是RDB的開銷並相比AOF日誌要低很多,
對於那些無法忍數據丟失的應用,建議使用AOF日誌。
2.2 memcached 不支持
3.1 記憶體的使用效率對比
如何是使用簡單的key-value存儲 memcached的利用率更高,但如果 redis 採用 hash 存儲,由於
其組合式的壓縮,其記憶體利用率會高於 memcached
4.性能對比
redis只使用單核,memcached是多核,所以平均每個核上 redis在存儲小數據時性能更高。
而在100k以上的數據時, memcached的性能會高於 redis
5.記憶體的管理機制不同
在Redis中,並不是所有的數據都一直存儲在記憶體中的。
當物理記憶體用完時,Redis可以將一些很久沒用到的value交換到磁碟。
Redis只會緩存所有的key的信息,如果Redis發現記憶體的使用量超過了某一個閥值,將觸發swap的操作,
Redis根據“swappability = age*log(size_in_memory)”計算出哪些key對應的value需要swap到磁碟。
然後再將這些key對應的value持久化到磁碟中,同時在記憶體中清除。
這種特性使得Redis可以保持超過其機器本身記憶體大小的數據。
Memcached預設使用Slab Allocation機制管理記憶體
其主要思想是按照預先規定的大小,將分配的記憶體分割成特定長度的塊以存儲相應長度的key-value數據記錄,以完全解決記憶體碎片問題。
Slab Allocation機制只為存儲外部數據而設計,也就是說所有的key-value數據都存儲在Slab Allocation系統里,
Memcached的記憶體管理制效率高,而且不會造成記憶體碎片,但是它最大的缺點就是會導致空間浪費。
6.集群管理不同
Memcached是全記憶體的數據緩衝系統
Redis雖然支持數據的持久化,但是全記憶體畢竟才是其高性能的本質。
Memcached本身並不支持分散式,因此只能在客戶端通過像一致性哈希這樣的分散式演算法來實現
Redis更偏向於在伺服器端構建分散式存儲。最新版本的Redis已經支持了分散式存儲功能。
一起乾同樣的事叫集群,分工合作的叫分散式