由於咱們項目上沒有使用過兩種,而我依舊對他們孰優孰劣比較好奇。redis
因此我逛了不少國內外的網站,獲得瞭如下的結論。數據庫
首先,Redis和Memcached是兩款很是給力的、快速的、而且都是使用內存作分佈式緩存數據的服務。對於提高咱們網站的的性能有很大的幫助(經過緩存數據、HTML片斷或其餘)。緩存
接下來,經過幾點來進行對比:服務器
讀寫速度網絡
- 都很是快。整體上顯示,redis的速度與memcached幾乎同樣快。
內存的使用數據結構
- memcached:設置緩存空間大小,但當插入項時,守護進程就會自動增長空間大小。沒有真正的方法來回收這些空間。全部的鍵均可能過時,能夠刷新數據庫,它仍然會使用配置的所有RAM。
- redis:Redis永遠不會使用超出咱們設置的空間大小。而且它會智能返回不須要的空間,例如:我將100,000個2KB的字符串(200MB)存儲在這兩個字符串中。Memcached RAM的使用增長到225MB。Redis RAM的使用增長到228MB。在刷新了這兩個數據以後,redis刪除了29MB,而memcached則保持在225MB。
- 磁盤I/O:對於redis來講,這是一個明顯的優點,由於它在缺省狀況下是這樣作的,而且具備可配置的持久性。在沒有第三方工具的狀況下,Memcached沒有向磁盤轉儲的機制。
memcached
- Memcached是一個簡單易變的高速緩存服務器。它容許您將鍵/值對存儲在一個值限制爲1MB的字符串中。
- 咱們能夠快速的訪問這些值,這個速度指的是網絡或內存帶寬的飽和。
- 當您從新啓動memcached時,數據就會消失。這對於緩存來講是很好的。咱們不該該把重要的東西儲存在那裏。
redis
- Redis能夠像memcached同樣完成相同的工做,並且能夠作得更好。
- Redis也能夠充當緩存。它也能夠存儲鍵/值對。redis,能夠達到512MB。
- 能夠關閉持久性,而且在從新啓動時也會丟失數據。
- 它的速度也很是快,常常受到網絡或內存帶寬的限制。
- Redis有集羣支持,並帶有高可用性的工具(redis-sentinel)。在過去的幾年中,redis也成爲了第三方工具的領導者。Redis Labs、亞馬遜等公司提供了許多有用的Redis工具和服務。圍繞redis的生態系統要大得多。大規模部署的數量如今可能比memcached更大。
Redis不只僅是一個緩存。它是一個內存中的數據結構服務器。分佈式
Redis的文檔比memcached更完善memcached
容災工具
- 在快照模式中,忽然崩潰可能致使少許丟失的數據。若是您絕對須要確保沒有數據丟失,不要擔憂,redis也有AOF (Append Only File) 模式。
支持更多的數據類型性能
- Memcached僅限於字符串,但Redis做爲一個數據結構服務器,能夠提供多種不一樣的數據類型。它還提供了所需的命令,以充分利用這些數據類型。例如:Strings、Hashes、Lists、Sets等等(查看數據類型官方文檔)
事物性和原子性
- redis中的命令是原子性的,這意味當向redis寫入一個值時,全部鏈接到redis的客戶端均可以看到該值。
- 從技術上講,memcached也是原子性的。
流水線
- Redis提供了一個名爲「流水線」的特性。若是有許多想要執行的redis命令,可使用管道將它們發送到redis,而不是一次一次。
- 一般,當對redis或memcached執行命令時,每一個命令都是一個單獨的請求/響應週期。經過使用管道,redis能夠緩衝多個命令,並一次性執行全部命令,響應全部命令。
總結
memcached,它是一個強大的、簡單的、穩定的、成熟的工具。甚至還有一些狀況,它比redis快一些。
若是您已經在使用memcached緩存,若是它知足您的須要,那麼就繼續使用它。若是是新的項目,我推薦您使用redis。