memcache、redis原理對比

来源:http://www.cnblogs.com/work115/archive/2016/06/14/5584646.html
-Advertisement-
Play Games

一、問題: 資料庫表數據量極大(千萬條),要求讓伺服器更加快速地響應用戶的需求。 資料庫表數據量極大(千萬條),要求讓伺服器更加快速地響應用戶的需求。 二、解決方案: 1.通過高速伺服器Cache緩存資料庫數據 2.記憶體資料庫 (這裡僅從數據緩存方面考慮,當然,後期可以採用Hadoop+HBase+ ...


一、問題:           資料庫表數據量極大(千萬條),要求讓伺服器更加快速地響應用戶的需求。   二、解決方案:      1.通過高速伺服器Cache緩存資料庫數據      2.記憶體資料庫     (這裡僅從數據緩存方面考慮,當然,後期可以採用Hadoop+HBase+Hive等分散式存儲分析平臺) 三、主流解Cache和資料庫對比: d1.png        上述技術基本上代表了當今在數據存儲方面所有的實現方案,其中主要涉及到了普通關係型資料庫(MySQL/PostgreSQL),NoSQL資料庫(MongoDB),記憶體資料庫(Redis),記憶體Cache(Memcached),我們現在需要的是對大數據表仍保持高效的查詢速度,普通關係型資料庫是無法滿足的。而MongoDB其實只是一種非關係型資料庫,其優勢在於可以存儲海量數據,具備強大的查詢功能,因此不宜用於緩存數據的場景。          從以上各數據可知,對於我們產品最可行的技術方案有兩種:          1.Memcached         記憶體Key-Value Cache          2.Redis                     記憶體資料庫   四、下麵重點分析Memcached和Redis兩種方案:   4.1 Memcached介紹          Memcached 是一個高性能的分散式記憶體對象緩存系統,用於動態Web應用以減輕資料庫負載。它通過在記憶體中緩存數據和對象來減少讀取資料庫的次數,從而提供動態、資料庫驅動網站的速度,現在已被LiveJournal、hatena、Facebook、Vox、LiveJournal等公司所使用。   4.2 Memcached工作方式分析            許多Web應用都將數據保存到 RDBMS中,應用伺服器從中讀取數據併在瀏覽器中顯示。 但隨著數據量的增大、訪問的集中,就會出現RDBMS的負擔加重、資料庫響應惡化、 網站顯示延遲等重大影響。Memcached是高性能的分散式記憶體緩存伺服器,通過緩存資料庫查詢結果,減少資料庫訪問次數,以提高動態Web等應用的速度、 提高可擴展性。下圖展示了memcache與資料庫端協同工作情況:        d2.png      其中的過程是這樣的:            1.檢查用戶請求的數據是緩存中是否有存在,如果有存在的話,只需要直接把請求的數據返回,無需查詢資料庫。

           2.如果請求的數據在緩存中找不到,這時候再去查詢資料庫。返回請求數據的同時,把數據存儲到緩存中一份。
           3.保持緩存的“新鮮性”,每當數據發生變化的時候(比如,數據有被修改,或被刪除的情況下),要同步的更新緩存信息,確保用戶不會在緩存取到舊的數據。


     Memcached作為高速運行的分散式緩存伺服器,具有以下的特點: 
    • 協議簡單 
    • 基於libevent的事件處理 
    • 內置記憶體存儲方式
    • memcached不互相通信的分散式
  4.3 如何實現分散式可拓展性?
     Memcached的分散式不是在伺服器端實現的,而是在客戶端應用中實現的,即通過內置演算法制定目標數據的節點,如下圖所示: d3.png 4.4 Redis 介紹          Redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字元串)、 list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在記憶體中。區別的是redis會周期性的把更新的數據寫入磁碟或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步,當前 Redis的應用已經非常廣泛,國內像新浪、淘寶,國外像 Flickr、Github等均在使用Redis的緩存服務。   4.5 Redis 工作方式分析        Redis作為一個高性能的key-value資料庫具有以下特征: 
    • 多樣的數據模型 
    • 持久化 
    • 主從同步  
     Redis支持豐富的數據類型,最為常用的數據類型主要由五種:String、Hash、List、Set和Sorted Set。Redis通常將數據存儲於記憶體中,或被配置為使用虛擬記憶體。Redis有一個很重要的特點就是它可以實現持久化數據,通過兩種方式可以實現數據持久化:使用RDB快照的方式,將記憶體中的數據不斷寫入磁碟;或使用類似MySQL的AOF日誌方式,記錄每次更新的日誌。前者性能較高,但是可能會引起一定程度的數據丟失;後者相反。 Redis支持將數據同步到多台從資料庫上,這種特性對提高讀取性能非常有益。      
4.6 Redis如何實現分散式可拓展性?   2.8以前的版本:與Memcached一致,可以在客戶端實現,也可以使用代理,twitter已開發出用於Redis和Memcached的代理Twemproxy 。 3.0 以後的版本:相較於Memcached只能採用客戶端實現分散式存儲,Redis則在伺服器端構建分散式存儲。Redis Cluster是一個實現了分散式且允許單點故障的Redis高級版本,它沒有中心節點,各個節點地位一致,具有線性可伸縮的功能。如圖給出Redis Cluster的分散式存儲架構,其中節點與節點之間通過二進位協議進行通信,節點與客戶端之間通過ascii協議進行通信。在數據的放置策略上,Redis Cluster將整個 key的數值域分成16384個哈希槽,每個節點上可以存儲一個或多個哈希槽,也就是說當前Redis Cluster支持的最大節點數就是16384        d4.jpg   五、綜合結論        應該說Memcached和Redis都能很好的滿足解決我們的問題,它們性能都很高,總的來說,可以把Redis理解為是對Memcached的拓展,是更加重量級的實現,提供了更多更強大的功能。具體來說:   1.性能上:      性能上都很出色,具體到細節,由於Redis只使用單核,而Memcached可以使用多核,所以平均每一個核上Redis在存儲小數據時比 Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis,雖然Redis最近也在存儲大數據的性能上進行優化,但是比起 Memcached,還是稍有遜色。   2.記憶體空間和數據量大小:      MemCached可以修改最大記憶體,採用LRU演算法。Redis增加了VM的特性,突破了物理記憶體的限制。   3.操作便利上:      MemCached數據結構單一,僅用來緩存數據,而Redis支持更加豐富的數據類型,也可以在伺服器端直接對數據進行豐富的操作,這樣可以減少網路IO次數和數據體積。   4.可靠性上:      MemCached不支持數據持久化,斷電或重啟後數據消失,但其穩定性是有保證的。Redis支持數據持久化和數據恢復,允許單點故障,但是同時也會付出性能的代價。   5.應用場景:      Memcached:動態系統中減輕資料庫負載,提升性能;做緩存,適合多讀少寫,大數據量的情況(如人人網大量查詢用戶信息、好友信息、文章信息等)。      Redis:適用於對讀寫效率要求都很高,數據處理業務複雜和對安全性要求較高的系統(如新浪微博的計數和微博發佈部分系統,對數據安全性、讀寫要求都很高)。   六、需要慎重考慮的部分   1.Memcached單個key-value大小有限,一個value最大隻支持1MB,而Redis最大支持512MB 2.Memcached只是個記憶體緩存,對可靠性無要求;而Redis更傾向於記憶體資料庫,因此對對可靠性方面要求比較高 3.從本質上講,Memcached只是一個單一key-value記憶體Cache;而Redis則是一個數據結構記憶體資料庫,支持五種數據類型,因此Redis除單純緩存作用外,還可以處理一些簡單的邏輯運算,Redis不僅可以緩存,而且還可以作為資料庫用 4.新版本(3.0)的Redis是指集群分散式,也就是說集群本身均衡客戶端請求,各個節點可以交流,可拓展行、可維護性更強大。

來自:http://blog.csdn.net/suifeng3051/article/details/23739295
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概念模型、邏輯模型、物理模型,著重於概念模型中的代表 ER圖 ...
  • Memcache使用了Slab Allocator的記憶體分配機制:按照預先規定的大小,將分配的記憶體分割成特定長度的塊,以完全解決記憶體碎片問題Memcache的存儲涉及到slab,page,chunk三個概念1.Chunk為固定大小的記憶體空間,預設為96Byte。2.page對應實際的物理空間,1個p ...
  • 本章將介紹如何在Sybase下使用游標 因業務需要,要批量處理一些數據,sql需要用到迴圈,所以要使用游標,我寫了一個簡單的游標,sql如下 但在Sybase下執行時,一直報錯,報錯內容如下: 經過不斷排查,最後發現問題所在: 修改後的sql如下: 再次執行,妥妥的,沒毛病…… ...
  • 工作快一年了,接觸的東西不是很多,學到的東西也不多。無意中看到公司的代碼有一點關於sqlite3的(不是我這一層負責的代碼),於是乎就學學試試。 參考: http://www.runoob.com/sqlite/sqlite-tutorial.html 20160612 更新 1,什麼是SQLite ...
  • 資料庫複習① 2016年6月14日 19:11 Main Database Concepts 資料庫概念 1.什麼是數據Data、什麼是信息Information,數據與信息之間的關係? Data & Information 數據與信息 Data is some type values, is us ...
  • ...
  • 重做日誌是對用戶的DML和DDL操作所做的記錄,它是保證資料庫安全的一種重要手段。當用戶執行DML或DDL命令時,資料庫伺服器將生成重做日誌,並將其記錄在重做日誌文件中。為了保證重做日誌文件的安全,需要對它們進行歸檔。 如果資料庫出現故障,可以利用重做日誌文件和歸檔日誌文件進行實例恢復或者介質恢復。 ...
  • 1.下載 下載地址:http://dev.mysql.com/downloads/mysql/ 根據電腦配置來選,我選了 windows(x86,64-bit),ZIP Archive這個,點擊Download,頁面跳轉到如下圖 點擊最下麵的No thanks,just start my downl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...