MongoDB 或者 redis 可以替代 memcached 嗎?

Coding-lover發表於2017-01-16

mongodb和memcached不是一個範疇內的東西。mongodb是文件型的非關係型資料庫,其優勢在於查詢功能比較強大,能儲存海量資料。mongodb和memcached不存在誰替換誰的問題。

和memcached更為接近的是redis。它們都是記憶體型資料庫,資料儲存在記憶體中,通過tcp直接存取,優勢是速度快,併發高,缺點是資料型別有限,查詢功能不強,一般用作快取。在我們團隊的專案中,一開始用的是memcached,後來用redis替代。

相比memcached:

1、redis具有持久化機制,可以定期將記憶體中的資料持久化到硬碟上。

2、redis具備binlog功能,可以將所有操作寫入日誌,當redis出現故障,可依照binlog進行資料恢復。

3、redis支援virtual memory,可以限定記憶體使用大小,當資料超過閾值,則通過類似LRU的演算法把記憶體中的最不常用資料儲存到硬碟的頁面檔案中。

4、redis原生支援的資料型別更多,使用的想象空間更大。

5、前面有位朋友所提及的一致性雜湊,用在redis的sharding中,一般是在負載非常高需要水平擴充套件時使用。我們還沒有用到這方面的功能,一般的專案,單機足夠支撐併發了。redis 3.0將推出cluster,功能更加強大。

6、redis更多優點,請移步官方網站查詢。

MongoDB不多說,不是一個型別的東西,Redis相對Memcached來說功能和特性上的優勢已經很明顯了。而對於效能,Redis作者的說法是平均到單個核上的效能,在單條資料不大的情況下Redis更好。為什麼這麼說呢,理由就是Redis是單執行緒執行的。
因為是單執行緒執行,所以和Memcached的多執行緒相比,整體效能肯定會偏低。
因為是單執行緒執行,所以IO是序列化的,網路IO和記憶體IO,因此當單條資料太大時,由於需要等待一個命令的所有IO完成才能進行後續的命令,所以效能會受影響。
而就記憶體使用上來說,目前Redis結合了tcmalloc和jemalloc兩個記憶體分配器,基本上和Memcached不相伯仲。如果是簡單且有規律的key value儲存,那麼用Redis的hash結構來做,記憶體使用上會驚人的變小,優勢是很明顯的。

更多參考:http://www.zhihu.com/question/19645807

相關文章