回覆列表
  • 1 # 劉凱78213346109

    memcache可做代理伺服器,redis是把瑞士軍刀,mongodb是最常用的nosql, 且支援sql語法。三者間在部分場景兩兩重疊。但是缺乏全面的可比性。就好比饅頭,蛋糕和餛飩。

  • 2 # IT老友

    搬運自己的答案,mongodb不應和redis/memcache比較,因為兩者的適用場景是完全不同的。

    mongodb是一款介於記憶體資料庫和關係資料庫的資料庫,是高效能、無模式的文件型資料庫。

    mongodb資料儲存在磁碟,只有在需要時透過mmap對映到記憶體,在記憶體中修改,修改完畢由作業系統負責flush到磁碟。

    優點:支援複雜的資料結構,能儲存海量的資料,能提供類似關係資料庫般強大的查詢。

    redis是一個開源的key-value儲存系統,所有資料都是放在記憶體中的,持久化是使用RDB方式或者aof方式。僅支援key、string、hash、list、set幾種結構,優點:讀寫速度非常快。缺點:受記憶體限制無法儲存過多的資料,也無法提供強大的查詢,只使用單核。

    memcache是一個高效能的分散式記憶體物件快取系統,用於動態Web應用以減輕資料庫負載。memcache僅支援簡單的key-value結構,但使用多核。

    在爬蟲中,經常採用redis+mongodb的方式,Mongodb用於儲存爬取的海量的資料,而redis則用於去重和儲存待爬取的url。

  • 3 # IT程式設計師碼農技術文摘

    redis、memcahce 比較相似,但與 mongodb 完全不同,幾乎沒有可比性。

    總的來說 redis/memcache 是基於記憶體的,講究的是效能,多用作快取層,比如說存放session。而 mongodb 是面向文件的,儲存的是類似JSON的非結構化資料,查詢起來非常方便,開發效率高,比較類似傳統SQL關係型資料庫。

    普遍認為redis效能明顯好於MemoryCache。所以這裡主要比較 Redis 和 Mongodb。

    體積

    Redis是一個基於記憶體的鍵值資料庫,它由C語言實現的,以單執行緒非同步的方式工作,與Nginx/ NodeJS工作原理近似。所以檔案非常小。編繹出來的主檔案還不到 2Mb,在 Linux 伺服器上初始只需要佔用1Mb左右的記憶體。

    Mongodb安裝包則要大的多,跟mySQL差不多,都是百兆級的。

    持久化

    Redis是先讀寫記憶體再非同步同步到磁碟,但持久化資料是需要時間的,如果每條記錄都觸發持久化,則效能優勢則體現不出來,這裡可能會產生一個問題,就是在資料改動不夠多時,資料還沒有持久化就重啟了系統,這部分資料是有可能丟失的。

    這裡可以在設定檔案中設定與入規則:

    save 900 1save 300 10save 60 10000

    以上規則表明,如果在1秒內發生900次資料發動,則開始寫入到硬碟。如果10秒發生300次發動,則就持久化。

    當你也可以設定成 save 1 1 每次發動都儲存到硬碟,但是效能會下降。

    MongoDB則不存在記憶體資料有可能丟失的問題,因為MongoDB每次改動都會寫入資料庫檔案。

    資料表

    Redis沒有嚴格意義上的表,習慣上一般採用 schema:key 形式做為鍵值,其中

    schema: 可理解為傳統資料庫中的表名key: 可理解為表中的主鍵

    比如將 user:1 中的name設定為kris

    HSET user:1 name kris

    Mongodb則可將collection當作表

    var col = db.collection("createIndexExample1");col.find({}).toArray(function(err, items) {

    });

    資料寫入

    Redis 可以透過 hash set資料型別支援,JSON物件的寫入,不過是二維的,有深層次JSON物件時,需要先序列化成string [JS程式碼]

    client.hmset(user:1, { username: "lee", age: "21" }, function(err) { console.log(err)})

    實際上執行的則是

    hmset user:1 user_name lee age 21

    MongoDB支援複雜結構JSON檔案的寫入 [JS程式碼]

    var col = db.collection("createIndexExample1"); col.insert([{a:1, node: {b:1}}], {w:1}, function(err, result) { }});

    資料查詢

    MongoDB支援對JSON物件的任何層次和資料進行查詢,使用起來非常方便:[JS程式碼]

    col.find({ a:1 }).toArray(function(err, items) });

    Redis 出於效能考慮,不能按照 hash object的值來搜尋hash物件。

    需要藉助一系列的複雜操作才能進行資料查詢,這一點比較接近資料庫的底層。

    比如我們有三條學生記錄,存放著ID,名字和姓名 [redis 指令]

    # 新增 3 個使用者和資訊

    hmset user:1 user_name lee age 21hmset user:2 user_name david age 25hmset user:3 user_name chris age 25

    如果想要按name和age查詢,則要建立相關的資料集合(set)來作為索引

    # 維護age索引sadd age:21 1sadd age:25 2 3# 維護name索引sadd name:lee 1sadd name:david 2sadd name:chris 3

    然後,求資料集交集(sinter),實現多條件查詢,比如我們要名字是lee,年齡是25歲的學生,會返回使用者ID

    sinter age:25 name:lee

  • 中秋節和大豐收的關聯?
  • 你只是看起來很努力?該如何正確判斷自己是否盡了全力?