性能比拼: Redis vs Memcached

本內容是對知名性能評測博主 Anton Putra Redis vs Memcached Performance Benchmark 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準

在本視頻中,我們將對比 RedisMemcached。我會介紹一些功能上的不同,但主要關注 性能

首先,我們會衡量緩存系統最重要的指標之一---延遲(latency),使用 p99 百分位數。緩存系統最常見的操作是 set(寫入)get(讀取),因此我們將重點測試這兩個操作。此外,我們還會衡量:

  • 吞吐量(throughput):即每秒可處理的操作數
  • 飽和度(saturation):通過監控 CPU 使用率、內存使用率 以及 網絡流量 來評估

所有測試均在 AWS 上運行,并使用與生產環境完全相同的基礎設施。本次測試中,我們使用 m7a.medium 實例來運行 Redis 和 Memcached。眾所周知,Redis 主要依賴 單線程,因此垂直擴展能力有限。

接下來,我會介紹測試設計。此外,我還使用了 EKS(Elastic Kubernetes Service) 集群,運行 Graviton 實例來部署監控組件,同時運行客戶端以模擬負載。


什么是緩存?

假設你有一個典型的 三層架構

  1. 客戶端層:可能是瀏覽器或移動應用
  2. 邏輯層:運行應用程序和業務邏輯
  3. 數據層:用于持久化存儲數據

舉個例子,假設你運營一個 電商網站,所有 用戶數據商品信息 都存儲在 關系型數據庫 中。每當客戶登錄賬戶時,你需要展示他們的 姓名、收貨地址 以及其他詳細信息。

這些數據并不會頻繁變更,但每次請求時,仍然需要查詢數據庫。如果你的用戶數量較少,這還可以接受,但如果有成千上萬的用戶,這些查詢 會變得越來越慢

解決方案是:
當用戶登錄時,查詢數據庫并將數據存儲在緩存中(例如 60 秒)
這樣可以 提高用戶體驗,加快網站加載速度,并減少數據庫負載。

你還可以緩存其他 SQL 查詢,比如 最暢銷商品,以便在首頁展示。這就是緩存系統最初解決的問題---緩存 SQL 查詢結果,存入臨時存儲。

之后,緩存系統的使用場景不斷擴展,并發展出了 持久化存儲 等額外功能。

目前,Memcached 仍主要用于 緩存數據庫查詢,而 Redis 則發展出了 豐富的功能集


測試設計

為了保證測試的公平性,我每次都會使用 Terraform 創建所有基礎設施。

  • 本次測試使用 medium(中等)實例,因為 Redis 是單線程的,只能通過 水平擴展(Redis 集群) 進行擴展。
  • 另外,我創建了一個 EKS 集群,并部署 Prometheus、Grafana 等監控組件,還配置了 每種緩存 20 個客戶端 來模擬負載。
  • 我會 逐步增加客戶端數量,直到 Redis 和 Memcached 都達到極限
  • 每次測試通常運行 1.5 - 2 小時

配置概覽

  • 我使用當前最新版本:

  • Redis 7.4.1
  • Memcached 1.6.32

  • Redis
    • 采用最小化配置,保留大部分默認設置
    • 禁用持久化
    • 最大連接數設為 10,000

  • Memcached

    • 默認內存從 64MB 增加到 4GB(與 VM 限制一致)
    • 最大連接數同樣設為 10,000
  • 客戶端

  • 使用 Go 語言開發
  • 內部集成 Prometheus 指標
  • 采用 最流行、最高效的驅動
  • 不使用內部緩存指標,而是通過 相同的直方圖桶 從客戶端端測量延遲,以確保測試更加準確。

第一次測試

接下來,我們開始運行測試。

在下方的圖表中,你可以看到我們逐步增加客戶端數量。

Redis 的 set(寫入)延遲從一開始就比 Memcached 略慢,但 get(讀取)延遲在最初幾分鐘幾乎相同
然而,當負載增加時,情況開始發生變化

  • CPU 使用率 在整個測試過程中幾乎相同
  • 內存使用情況 也相似,但呈現出不同的模式:
    • set 操作設置 20 秒的過期時間,因此 Redis 和 Memcached 每 20 秒都會刪除數據
    • 兩者的內存清理方式不同
  • 網絡傳輸的數據量 也有一些不同

當操作數達到 50,000 次/秒 時,Redis 開始落后于 Memcached,并且 延遲上升到 10 - 15 毫秒
相比之下,Memcached 在整個測試過程中保持穩定

在網絡上,你可能會看到 Memcached 的性能比 Redis 更強,但 延遲才是最關鍵的指標
更高的延遲意味著網頁加載更慢,最終影響用戶體驗。

盡管 Redis 具有豐富的功能,但你真的需要它們嗎?

Redis 集群難以擴展和維護,你可能需要不斷添加 新的分片(shard) 并進行 重新平衡
通常,很多人一開始自己管理 Redis,但隨著負載增加,他們會轉向 Redis 集群
經歷幾次 生產事故 后,最終可能會選擇 昂貴的托管 Redis(AWS 或其他云服務)

相比之下,Memcached 非常容易運行,如果你 只是想緩存 SQL 查詢 以加速數據庫,Memcached 是一個不錯的選擇


測試結果

在 CPU 資源耗盡之前:

  • Redis 最高處理能力:94,000 請求/秒
  • Memcached 最高處理能力:112,000 請求/秒

最重要的還是延遲
根據本次測試結果,你可以自己決定:

  • 是選擇簡單、低延遲的 Memcached
  • 還是選擇功能強大的 Redis

請記住,維護 Redis 集群非常困難,很多公司甚至專門雇人 只負責維持 Redis 的正常運行



現在,我們查看整個測試期間的各項指標:

  1. 每秒操作數(Operations per second)

  • 50,000 ops/sec 時,Redis 和 Memcached 的性能開始出現差異
  • 可以清楚地看到 每種緩存的最大處理能力
  1. SET(寫入)操作的延遲

  • 延遲差異 非常明顯
  • 在 Redis 過載時,延遲甚至接近 SQL 查詢本身的延遲(35ms)
  • 但在 CPU 使用率低于 15% 時,兩者的延遲都很穩定且較低
  1. GET(讀取)操作的延遲

  • 趨勢類似,但 GET 操作的平均時間約為 SET 操作的一半
  • Redis 最高 GET 延遲約為 20ms
  1. CPU 使用率

  • 兩者表現幾乎相同,在 CPU 滿載前都能維持穩定
  1. 內存使用

  • 兩者模式稍有不同
  1. 網絡使用

  • 有一定的區別

總結

這些測試都使用的是 默認配置
如果你能優化 Redis 或 Memcached,歡迎提交 PR(Pull Request),我會給予 署名,并分享如何改進性能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77437.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77437.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77437.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

P1331 洛谷 海戰

題目描述 思路 這個題需要讀懂題意,即“什么樣的形式表示兩只船相撞?” ----> 上下相鄰或左右相鄰 如果圖是不和法的,一定存在如下結構: # # . # 或 # # # . 或 # . # # 或 . # # #即四個格子里有三個#,一個"…

傳統項目純前端實現導出excel之xlsx.bundle.js

傳統項目純前端實現導出excel之xlsx.js 自從vue問世后,使得前端開發更加簡潔從容,極大的豐富組件樣式和頁面渲染效果,使得前端功能的可擴展性得到極大地加強。雖然vue的使用對于前后端分離的項目對于功能實現與擴展有了質的飛躍,但…

2025.04.10-拼多多春招筆試第四題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 04. 優惠券最優分配問題 問題描述 LYA是一家電商平臺的運營經理,負責促銷活動的策劃。現在平臺上有 n n n

基于 Spring Boot 瑞吉外賣系統開發(三)

基于 Spring Boot 瑞吉外賣系統開發&#xff08;三&#xff09; 分類列表 靜態頁面 實現功能所需要的接口 定義Mapper接口 Mapper public interface CategoryMapper extends BaseMapper<Category> {}定義Service接口 public interface CategoryService extends ISe…

FlinkSQL的常用語言

FlinkSQL 常用語言指南 FlinkSQL 是 Apache Flink 提供的 SQL 接口&#xff0c;允許用戶使用標準 SQL 或擴展的 SQL 語法來處理流式和批式數據。以下是 FlinkSQL 的常用語言元素和操作&#xff1a; 基本查詢 -- 選擇查詢 SELECT * FROM table_name;-- 帶條件的查詢 SELECT c…

spring mvc異步請求 sse 大文件下載 斷點續傳下載Range

學習連接 異步Servlet3.0 Spring Boot 處理異步請求&#xff08;DeferredResult 基礎案例、DeferredResult 超時案例、DeferredResult 擴展案例、DeferredResult 方法匯總&#xff09; spring.io mvc Asynchronous Requests 官網文檔 spring.io webflux&webclient官網文…

一問看懂——支持向量機SVM(Support Vector Machine)

目錄 蕪湖~~~支持向量機&#xff08;SVM&#xff09; 1. 引言 2. 基本思想 3. 數學模型 3.1 超平面定義 3.2 分類間隔與目標函數 3.3 軟間隔與松弛變量 4. 核函數方法&#xff08;Kernel Trick&#xff09; 4.1 核函數定義 4.2 常用核函數 5. SVM 的幾種類型 6. SV…

藍橋杯 拼數(字符串大小比較)

題目描述 設有 n 個正整數 a1?…an?&#xff0c;將它們聯接成一排&#xff0c;相鄰數字首尾相接&#xff0c;組成一個最大的整數。 輸入格式 第一行有一個整數&#xff0c;表示數字個數 n。 第二行有 n 個整數&#xff0c;表示給出的 n 個整數 ai?。 輸出格式 一個正整…

Elasticsearch 系列專題 - 第三篇:搜索與查詢

搜索是 Elasticsearch 的核心功能之一。本篇將介紹如何構建高效的查詢、優化搜索結果,以及調整相關性評分,幫助你充分發揮 Elasticsearch 的搜索能力。 1. 基礎查詢 1.1 Match Query 與 Term Query 的區別 Match Query:用于全文搜索,會對查詢詞進行分詞。 GET /my_index/_…

本地電腦使用sshuttle命令將網絡流量代理到ssh連接的電腦去實現訪問受限網絡

本地電腦使用sshuttle命令將網絡流量代理到ssh連接的電腦去實現訪問受限網絡 安裝使用 工作過程中, 經常會遇到, 需要訪問客戶內網環境的問題, 一般都需要安轉各式各樣的VPN客戶端到本地電腦上, 軟件多了也會造成困擾, 所有, 找了一款還不錯的命令工具去解決這個痛點 安裝 官方…

雙相機結合halcon的條碼檢測

以下是針對提供的C#代碼的詳細注釋和解釋&#xff0c;結合Halcon庫的功能和代碼結構進行說明&#xff1a; --- ### **代碼整體結構** 該代碼是一個基于Halcon庫的條碼掃描類GeneralBarcodeScan&#xff0c;支持單臺或雙臺相機的條碼檢測&#xff0c;并通過回調接口返回結果。…

python基礎語法12-迭代器與生成器

Python 生成器與迭代器詳解 在 Python 中&#xff0c;生成器和迭代器是處理大量數據時的強大工具。它們能夠幫助我們節省內存&#xff0c;避免一次性加載過多數據。生成器通過 yield 關鍵字實現&#xff0c;允許我們逐步產生數據&#xff0c;而迭代器通過實現特定的接口&#…

公司內部建立pypi源

有一篇建立apt源的文章在這里&#xff0c;需要的可以查看&#xff1a;公司內部建立apt源-CSDN博客 server: pip install pypiserver mkdir -d pypi/packages cp test.whl pypi/packages pypi-server run --port 8080 /home/xu/pypi/packages & 網頁訪問&#xff1a;http:…

VMware Workstation/Player 的詳細安裝使用指南

以下是 VMware Workstation/Player 的完整下載、安裝指南&#xff0c;包含詳細步驟、常見問題及解決方法&#xff0c;以及進階使用技巧&#xff0c;適用于 Windows 和 macOS 用戶。 VMware Workstation/Player 的詳細安裝使用指南—目錄 一、下載與安裝詳細指南1. 系統要求2. 下…

藍橋杯python組考前準備

1.保留k位小數 round(10/3, 2) # 第二個參數表示保留幾位小數 2.輸入代替方案&#xff08;加速讀取&#xff09; import sys n int(sys.stdin.readline()) # 讀取整數&#xff08;不加int就是字符串&#xff09; a, b map(int, sys.stdin.readline().split()) # 一行讀取多個…

【JSON2WEB】16 login.html 登錄密碼加密傳輸

【JSON2WEB】系列目錄 【JSON2WEB】01 WEB管理信息系統架構設計 【JSON2WEB】02 JSON2WEB初步UI設計 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代碼前端框架介紹 【JSON2WEB】05 前端開發三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSO…

計算機網絡起源

互聯網的起源和發展是一個充滿創新、突破和變革的歷程&#xff0c;從20世紀60年代到1989年&#xff0c;這段時期為互聯網的誕生和普及奠定了堅實的基礎。讓我們詳細回顧這一段激動人心的歷史。 計算機的發展與ARPANET的建立&#xff08;20世紀60年代&#xff09; 互聯網的誕生…

洛谷P1824進擊的奶牛簡單二分

題目如下 代碼如下 謝謝觀看

如何建立高效的會議機制

建立高效的會議機制需做到&#xff1a;明確會議目標、制定并提前分發議程、控制會議時長、確保有效溝通與反饋、及時跟進執行情況。其中&#xff0c;明確會議目標是核心關鍵&#xff0c;它直接決定了會議的方向與效率。只有明確目標&#xff0c;會議才不會偏離初衷&#xff0c;…

開源AI大模型AI智能名片S2B2C商城小程序:科技浪潮下的商業新引擎

摘要&#xff1a; 本文聚焦于科技迅猛發展背景下&#xff0c;開源AI大模型、AI智能名片與S2B2C商城小程序的融合應用。通過分析元宇宙、人工智能、區塊鏈、5G等前沿科技帶來的商業變革&#xff0c;闡述開源AI大模型AI智能名片S2B2C商城小程序在整合資源、優化服務、提升用戶體驗…