面试题之Memcached与Redis的区别
生活随笔
收集整理的這篇文章主要介紹了
面试题之Memcached与Redis的区别
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
| | Redis | Memcached |
| 網(wǎng)絡(luò)IO模型 | 單線程的IO復用的網(wǎng)絡(luò)模型 | 多線程的非阻塞IO復用的網(wǎng)絡(luò)模型 |
| 數(shù)據(jù)支持類型 | key-value數(shù)據(jù)類型 還支持list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲 | key-value形式存儲和訪問數(shù)據(jù) 查詢的時間復雜度降低到O(1) |
| 內(nèi)存管理機制 | 基于zmalloc.h和zmalloc.c兩個文件對mallc/free包裝來實現(xiàn)管理內(nèi)存 使用現(xiàn)場申請內(nèi)存的方式 | 基于Slab Allocation機制管理內(nèi)存 使用預分配的內(nèi)存池的方式 |
| 數(shù)據(jù)存儲及持久化 | 支持存儲 除以in-memory的形式存儲 另外兩種:快照(snapshotting),只追加文件(append-only file, AOF) | 不支持存儲 只以in-memory的形式存儲 |
| 數(shù)據(jù)一致性 | 提供了事務(wù)的功能,保證命令的原子性,中間不會被任何操作打斷 | 提供了cas命令,保證多個并發(fā)訪問操作同一份數(shù)據(jù)的一致性 |
| 集群管理 | 服務(wù)器端構(gòu)建分布式存儲 | 只能采用客戶端實現(xiàn)分布式存儲 |
| 性能 | 單核 數(shù)據(jù)量<100k ? 高 數(shù)據(jù)量>100k ? 低 | 多核 數(shù)據(jù)量<100k ? 低 數(shù)據(jù)量>100k ? 高 |
| 內(nèi)存使用效率 | 采用key-value 存儲結(jié)構(gòu) 利用率低 采用hash結(jié)構(gòu)來做key-value存儲(組合式的壓縮方式) ?利用率高 | 采用key-value 存儲結(jié)構(gòu) 利用率高 |
Redis和Memcached這種基于內(nèi)存的 數(shù)據(jù)庫 系統(tǒng)來說,內(nèi)存管理的效率高低是影響系統(tǒng)性能的關(guān)鍵因素。
Redis和Memcached最大存儲量是根據(jù)機器 內(nèi)存大小 而定。
Redis? 是一種鍵值數(shù)據(jù)庫,處于關(guān)系數(shù)據(jù)庫和鍵值數(shù)據(jù)庫之間。
Redis采用的是包裝的mallc/free方式來實現(xiàn)內(nèi)存管理
Slab Allocation機制的原理:它首先申請一大塊內(nèi)存,并將其分割成各種尺寸的塊Chunk,并把尺寸相同的塊分成組Slab Class。其中,Chunk就是用來存儲key-value數(shù)據(jù)的最小單位。每個Slab Class的大小,可以在Memcached啟動的時候通過制定Growth Factor來控制。假定圖中Growth Factor的取值為1.25,如果第一組Chunk的大小為88個字節(jié),第二組Chunk的大小就為112個字節(jié),依此類推。
Memcached使用預分配的內(nèi)存池的方式,使用slab和大小不同的chunk來管理內(nèi)存,Item根據(jù)大小選擇合適的chunk存儲,內(nèi)存池的方式可以省去申請/釋放內(nèi)存的開銷,并且能減小內(nèi)存碎片產(chǎn)生,但這種方式也會帶來一定程度上的空間浪費,并且在內(nèi)存仍然有很大空間時,新的數(shù)據(jù)也可能會被剔除。
Redis使用現(xiàn)場申請內(nèi)存的方式來存儲數(shù)據(jù),并且很少使用free-list等方式來優(yōu)化內(nèi)存分配,會在一定程度上存在內(nèi)存碎片,Redis跟據(jù)存儲命令參數(shù),會把帶過期時間的數(shù)據(jù)單獨存放在一起,并把它們稱為臨時數(shù)據(jù),非臨時數(shù)據(jù)是永遠不會被剔除的,即便物理內(nèi)存不夠,導致swap也不會剔除任何非臨時數(shù)據(jù)(但會嘗試剔除部分臨時數(shù)據(jù)),這點上Redis更適合作為存儲而不是cache。
redis提供的兩種不同的持久化方法來存儲數(shù)據(jù)到硬盤里面:
①快照(snapshotting),它可以將存在于某一時刻的所有數(shù)據(jù)都寫入硬盤里面。
②只追加文件(append-only file, AOF),它會在執(zhí)行寫命令時,將被執(zhí)行的寫命令復制到硬盤里面。
備注:malloc/free是C++/C語言的標準庫函數(shù)
總結(jié)
以上是生活随笔為你收集整理的面试题之Memcached与Redis的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跨平台 C/C++ memcached
- 下一篇: mongodb,redis,mysql