redis、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。
推薦給大家的一本書籍:<NoSQL精粹>
總結
以上是生活随笔為你收集整理的redis、memcache、mongoDB有哪些区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 航拍苏伊士运河堵船震撼画面 全球海运业都
- 下一篇: 一直用PDO,PHP中操作MYSQL数据