redis、memcache、mongoDB有哪些區別?例如:性能、可靠性、數據一致性等方麵的區別。
ringa_lee
下面的內容來自同事的總結,貼出來分享:MemcachedMemcached的優點: Memcached可以利用多核心優勢,單一實例吞吐量極高,可以達到數十萬QPS(取決於key、value的位元組大小以及伺服器硬體效能,日常環境中QPS高峰大約在4-6w左右)。適用於最大程度扛量。 支援直接配置為session handle。 坑少。 Memcached的限制: 只支援簡單的key/value資料結構,不像Redis可以支援豐富的資料類型。 無法進行持久化,資料不能備份,只能用於快取使用,且重新啟動後資料全部遺失。 無法進行資料同步,無法將MC中的資料遷移到其他MC實例中。 Memcached內存分配採用Slab Allocation機制管理內存,value大小分佈差異較大時會造成內存利用率降低,並引發低利用率時依然出現踢出等問題。需要使用者註重value設計。
RedisRedis的優點: 支援多種資料結構,如 string(字串)、 list(雙向鍊錶)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基數估算) 支援持久化操作,可以進行aof及rdb資料持久化到磁碟,從而進行資料備份或資料復原等操作,較好的防止資料遺失的手段。 支援透過Replication進行資料複製,透過master-slave機制,可以即時進行資料的同步複製,支援多層複製和增量複製,master-slave機制是Redis進行HA的重要手段。 單線程請求,所有命令串行執行,並發情況下不需要考慮資料一致性問題。 支援pub/sub訊息訂閱機制,可以用來進行訊息訂閱與通知。 支援簡單的事務需求,但業界使用場景很少,並不成熟。
Redis的限制: Redis只能使用單線程,效能受限於CPU效能,故單實例CPU最高才可能達到5-6wQPS每秒(取決於資料結構,資料大小以及伺服器硬體效能,日常環境中QPS尖峰大約在1-2w左右)。 支援簡單的事務需求,但業界使用場景很少,並不成熟,既是優點也是缺點。 Redis在string類型上會消耗較多內存,可以使用dict(hash表)壓縮存儲以降低內存耗用。
:)以下是我個人的補充 Mc和Redis都是Key-Value類型,不適合在不同資料集之間建立關係,也不適合進行查詢搜尋。例如redis的keys pattern這種匹配操作,對redis的效能是災難。
Mogodb mogodb是一種文檔性的資料庫。先解釋文檔的資料庫,也就是可以存放xml、json、bson類型系那個的資料。這些資料具備自述性(self-describing),呈現分層的樹狀資料結構。 redis可以用hash存放簡單關係型資料。 mogodb存放json格式資料。 適合場景:事件記錄、內容管理或部落格平台,例如評論系統。
nosq的產品目前很多,架構師的選擇導向主要有以下兩個因素: 1)適合應用程式的使用場景,例如評論系統用比較適合使用mogodb,而mc也可以實現(應用程式將資料轉換成json存入,但部分資料更新不方便) 2)團隊開發較為熟悉的技術,例如一個團隊一直在使用mc,因而有限選擇mc,而不是redis。 還有中嚴重的狀況,開發團隊一直使用mogodb,在適合kv nosq的場景下而繼續選擇mogodb。
推薦給大家的一本書:
http://segmentfault.net/q/1010000002572713
redis和memcache是兩種快取機制,主要用來減少資料庫壓力提高存取速度。 redis可以將快取保存到硬碟,重啟電腦可以繼續調用,還有很多memcache所沒有的功能,memcache只是單純的快取在記憶體中,功能單一,效率高。至於mongoDB,這尼瑪就是一資料庫
下面的內容來自同事的總結,貼出來分享:
Memcached
Memcached的優點:
Memcached可以利用多核心優勢,單一實例吞吐量極高,可以達到數十萬QPS(取決於key、value的位元組大小以及伺服器硬體效能,日常環境中QPS高峰大約在4-6w左右)。適用於最大程度扛量。
支援直接配置為session handle。
坑少。
Memcached的限制:
只支援簡單的key/value資料結構,不像Redis可以支援豐富的資料類型。
無法進行持久化,資料不能備份,只能用於快取使用,且重新啟動後資料全部遺失。
無法進行資料同步,無法將MC中的資料遷移到其他MC實例中。
Memcached內存分配採用Slab Allocation機制管理內存,value大小分佈差異較大時會造成內存利用率降低,並引發低利用率時依然出現踢出等問題。需要使用者註重value設計。
Redis
Redis的優點:
支援多種資料結構,如 string(字串)、 list(雙向鍊錶)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基數估算)
支援持久化操作,可以進行aof及rdb資料持久化到磁碟,從而進行資料備份或資料復原等操作,較好的防止資料遺失的手段。
支援透過Replication進行資料複製,透過master-slave機制,可以即時進行資料的同步複製,支援多層複製和增量複製,master-slave機制是Redis進行HA的重要手段。
單線程請求,所有命令串行執行,並發情況下不需要考慮資料一致性問題。
支援pub/sub訊息訂閱機制,可以用來進行訊息訂閱與通知。
支援簡單的事務需求,但業界使用場景很少,並不成熟。
Redis的限制:
Redis只能使用單線程,效能受限於CPU效能,故單實例CPU最高才可能達到5-6wQPS每秒(取決於資料結構,資料大小以及伺服器硬體效能,日常環境中QPS尖峰大約在1-2w左右)。
支援簡單的事務需求,但業界使用場景很少,並不成熟,既是優點也是缺點。
Redis在string類型上會消耗較多內存,可以使用dict(hash表)壓縮存儲以降低內存耗用。
:)以下是我個人的補充
Mc和Redis都是Key-Value類型,不適合在不同資料集之間建立關係,也不適合進行查詢搜尋。例如redis的keys pattern這種匹配操作,對redis的效能是災難。
Mogodb
mogodb是一種文檔性的資料庫。先解釋文檔的資料庫,也就是可以存放xml、json、bson類型系那個的資料。這些資料具備自述性(self-describing),呈現分層的樹狀資料結構。 redis可以用hash存放簡單關係型資料。
mogodb存放json格式資料。
適合場景:事件記錄、內容管理或部落格平台,例如評論系統。
nosq的產品目前很多,架構師的選擇導向主要有以下兩個因素:
1)適合應用程式的使用場景,例如評論系統用比較適合使用mogodb,而mc也可以實現(應用程式將資料轉換成json存入,但部分資料更新不方便)
2)團隊開發較為熟悉的技術,例如一個團隊一直在使用mc,因而有限選擇mc,而不是redis。
還有中嚴重的狀況,開發團隊一直使用mogodb,在適合kv nosq的場景下而繼續選擇mogodb。
推薦給大家的一本書:
http://segmentfault.net/q/1010000002572713
redis和memcache是兩種快取機制,主要用來減少資料庫壓力提高存取速度。 redis可以將快取保存到硬碟,重啟電腦可以繼續調用,還有很多memcache所沒有的功能,memcache只是單純的快取在記憶體中,功能單一,效率高。至於mongoDB,這尼瑪就是一資料庫