Redis 突然變 「慢」 了,是運維還是開發的錯?

2020-12-16 CSDN

作者 | 不才陳某 責編 | 張文

頭圖 | CSDN 下載自視覺中國

來源 | 碼猿技術專欄(ID:oneswholife)

前言

眾所周知 Redis 是單線程,有著極快的響應速度,但是有一天 Redis 突然變"慢"了,運維甚至開發都慌了,開始一系列的騷操作了,但是一點效果都沒有,why?

遇到問題不要慌。首先需要確定的是:Redis真的變慢了嗎?

今天陳某就來介紹下以什麼標準為基線判斷Redis變慢了?

Redis真的變慢了?

我們知道一個應用程式在伺服器上運行,它的運行快慢和硬體乃至底層作業系統都有巨大的關係,因此 Redis 響應慢了就真的是 Redis 的鍋?

如何判斷 Redis 是不是真的變慢了?一個最直接方法:查看Redis響應延遲

大部分情況下 Redis 的延遲很低,但是在某些時刻延遲突然很高,當你發現Redis 命令的執行時間突然增長到幾秒,基本就可以認定 Redis 變慢了。

但是不同的軟硬體環境下,延遲時間的標準卻是大相逕庭,比如在伺服器 A 上延遲為 1s 時基本就能判定 Redis 變慢了,在較好配置的伺服器 B 上甚至延遲10ms 就可以判定 Redis 變慢了。

顯然上述的標準很難判斷,此時只能通過 Redis 基線性能來判斷。

基線性能:系統在低壓力、無幹擾下的基本性能,這個性能只由當前的軟體配置決定。

那麼如何確定這個基線性能呢?很多人疑惑了?

從 2.8.7 版本開始,redis-cli 命令提供了–intrinsic-latency 選項,可以用來監測和統計測試期間內的最大延遲,這個延遲可以作為 Redis 的基線性能。其中,測試時長可以用–intrinsic-latency 選項的參數來指定(一般情況下 120s足夠監測到最大延遲了)。

本機測試(未通過客戶端)的監測命令如下:

redis-cli --intrinsic-latency 120Max latency so far: 1 microseconds.Max latency so far: 9 microseconds.Max latency so far: 11 microseconds.Max latency so far: 29 microseconds.Max latency so far: 34 microseconds.Max latency so far: 36 microseconds.Max latency so far: 42 microseconds.Max latency so far: 44 microseconds.Max latency so far: 62 microseconds.Max latency so far: 599 microseconds.Max latency so far: 613 microseconds.Max latency so far: 8158 microseconds.Max latency so far: 13426 microseconds.Max latency so far: 16073 microseconds.Max latency so far: 19587 microseconds.Max latency so far: 22988 microseconds.1982697419 total runs (avg latency: 0.0605 microseconds / 605.24 nanoseconds per run).Worst run took 379819x longer than the average latency.

發現最大的延遲 22988 微秒,因此這裡的基線性能為 22988 微秒。

基線性能只和作業系統、硬體配置相關,因此這裡可以結合基線性能判斷 Redis是否真的變慢了?

一般運行時延遲達到基線性能的 2 倍以上則可判定 Redis 變慢了。

注意:基線性能非常重要,尤其對於虛擬化的環境(虛擬機、容器),他們的基線性能相對很高,因此結合基線性能判斷是必要的。

切記:一定要在本機上運行測試命令,如果通過客戶端則需要考慮網絡性能的影響。

現在有很多網絡性能的測量工具,比如 iperf,如果發現網絡阻塞了,此時就需要聯絡公司的網絡工程師了。

總結

本文介紹了如何判斷 Redis 變慢的標準,即是基線性能。只有結合基線性能和運行延遲相對比,大概超過 2 倍以上則可判斷 Redis 真的變慢了。

相關焦點

  • 你的Redis是不是突然會變慢!!
    很多時候,Redis出現訪問延遲變大,都與我們的使用不當或運維不合理導致的。這篇文章我們就來分析一下Redis在使用過程中,經常會遇到的延遲問題以及如何定位和分析。使用複雜度高的命令如果在使用Redis時,發現訪問延遲突然增大,如何進行排查?首先,第一步,建議你去查看一下Redis的慢日誌。
  • 面試官問:Redis變慢了,你會怎麼排查?
    很多時候,Redis出現訪問延遲變大,都與我們的使用不當或運維不合理導致的。 這篇文章我們就來分析一下Redis在使用過程中,經常會遇到的延遲問題以及如何定位和分析。 使用複雜度高的命令 如果在使用Redis時,發現訪問延遲突然增大,如何進行排查?
  • 程式設計師究竟是該做開發還是運維?
    #思途# 在進行職業方向選擇時,一部分程式設計師往往會面臨究竟是選擇運維還是開發崗位的問題,雖說二者從業人數都有許多,但終歸還是有所差別。那麼,這兩個方向,作為新手的你,究竟該怎麼選呢?今天中享思途小編就帶大家來看一下。
  • 雲計算培訓學院,雲計算Python自動化運維開發實戰
    都忘記是什麼時候知道python的了,我是搞linux運維的,早先只是知道搞運維必須會shell,要做一些運維自動化的工作,比如實現一些定時備份數據啊、批量執行某個操作啊、寫寫監控腳本什麼的。後來發現工作量大的時候shell開始變慢,實現某個功能使用shell感覺力不從心,聽人說python能實現shell能做的一切功能,而且開發效率高,速度快,慢慢的就認識了python,多多少少看點簡單的東西。
  • 開發運維已死,無運維萬歲
    在如今的IT發展趨勢中,開發運維(DevOps )這個詞非常流行。這個詞是幾年前隨著單頁應用程式(SPA)的盛行而開始火爆起來的。我認為從技術接受的角度來看這毫無問題。突然間,有人採用了某種新技術,然後所有人都開始採用並傳播。在過去的幾年中,開發運維就是這樣一種情況。然而,在接下來的幾年中,你將聽到一個新的流行語:無運維(NoOps)。
  • 7600字帶你學會 Redis 性能優化點,建議收藏!
    所以,儘量不要在生產環境的代碼使用這些執行很慢的指令,這一點 Redis 的作者在博客[8]中也提到了。另外,運維同學查詢 Redis 的時候也儘量不要用。甚至,Redis Essential 這本書建議利用rename-command KEYS ''來禁止使用這個耗時的指令。
  • 還不懂Redis是什麼?一文帶你深入Redis基本結構,準備向開發進軍
    #運行redis容器〉docker run - name myredis -d -p6379:6379 redis .#執行容器中的redis-cli, 可以直接使用命令行操作redis> docker exec -it myredis redis-cliGithub源碼編譯方式#下載源碼> git
  • 詳解十三款運維監控工具
    GangliaGrafanaZenossOpen-falconCacti天兔開源監控(只適用於mysql、redis入門容易,能實現基礎的監控,但是深層次需求需要非常熟悉Zabbix並進行大量的二次定製開發,難度較大;3. 系統級別報警設置相對比較多,如果不篩選的話報警郵件會很多;並且自定義的項目報警需要自己設置,過程比較繁瑣(但是網上的模板比較,也可以使用模板導入的方法);4. 缺少數據匯總功能,如無法查看一組伺服器平均值,需進行二次開發;5.
  • 腳踏兩隻船——「開發」與「運維」
    孩子的話卻讓我很無奈,作為一名「滬漂」,我也曾以這個理由踏上了開發這條船。結合自己學過的開發、管理相關知識,決定走項目管理的路。那在這之前,就需要了解更多項目裡涉及的東西。我開始兼起項目助理的崗位,參與任務安排、各種會議,有時間協助測試人員同時也能學習測試。偶然的機會項目裡負責運維的同事出國出差,我主動承擔運維的差事,同事飛機起飛前給我培訓了兩個小時,然後說有事打電話聯繫。
  • 【深入學習Redis】Redis內存模型
    mem_fragmentation_ratio<1,說明Redis使用了虛擬內存,由於虛擬內存的媒介是磁碟,比內存速度要慢很多,當這種情況出現時,應該及時排查,如果內存不足應該及時處理,如增加Redis節點、增加Redis伺服器的內存、優化應用等。
  • 騰訊開源分布式存儲系統 Tendis,可完全兼容 Redis
    完全兼容 redis 協議,支持 redis 主要數據結構和接口,兼容大部分原生Redis命令。 持久化存儲。使用 rocksdb 作為存儲引擎,所有數據以特定格式存儲在 rocksdb 中,最大支持 PB 級存儲。 去中心化架構。
  • 「運維工程師面試真題」網易、360面經帶來了!
    年後想找運維工程師的職位?面試題你積累的如何了?下面陝西優就業小優給大家帶來了網易和360運維工程師的面試真題,看看如果是你能回答出來多少:360企業安全運維開發面試問到哪些問題?360企業安全運維開發一面:主要問項目,扣得很細1、簡單介紹一下django框架(項目之一django開發)2、cookie和session的區別,你在實際開發中,cookie存什麼?
  • 國內外三個不同領域巨頭分享的Redis實戰經驗及使用場景
    但當調用id不可控,有較多垃圾用戶調用時,由於memcache未有命中,會大量的穿透至Mysql伺服器,瞬間造成連接數瘋長,整體吞吐量降低,響應時間變慢。這裡我們可以用redis記錄全量的用戶判定信息,如string key:uid int:type,做一次反向的cache,當用戶在redis快速獲取自己等級等信息後,再去Mc+Mysql層去獲取全量信息。
  • 經典面試題:Redis的熱key問題如何發現和解決?
    本文預計分為如下幾個部分正文熱Key問題 上面提到,所謂熱key問題就是,突然有幾十萬的請求去訪問redis上的某個特定key。那麼,這樣會造成流量過於集中,達到物理網卡上限,從而導致這臺redis的伺服器宕機。那接下來這個key的請求,就會直接懟到你的資料庫上,導致你的服務不可用。
  • 談AIOps基礎-從自動化運維到智能化運維
    因此在談智能化運維前,還是先談下自動化運維平臺。自動化運維平臺分析另一個是自助化服務:標準運維通過與藍鯨集成平臺深度整合,為用戶提供了「輕應用」和「職能化」功能,讓用戶可以將業務日常的運維工作交給產品人員執行,實現業務的發布、變更等工作自助化。標準運維後臺使用 Python 作為開發語言,使用 Django 開發框架;前端使用 Vue 開發頁面,使用 jQuery 開發標準插件,通過配置式的開發模式, 不斷降低用戶開發標準插件前端表單的難度。
  • redis學習筆記(四)主從數據同步
    一、redis主從模式的讀寫分離    redis通過多實例來保存數據,為了保證redis實例數據的一致性,因此在主從模式下,主從之間採用的是讀寫分離的方式。    讀操作:主、從實例都可以接收命令操作讀請求。
  • 三歪推薦:Redis常見的面試題
    鍊表linkedlist:redis鍊表是一個雙向無環鍊表結構,很多發布訂閱、慢查詢、監視器功能都是使用到了鍊表來實現,每個鍊表的節點由一個listNode結構來表示,每個節點都有指向前置節點和後置節點的指針,同時表頭節點的前置和後置節點都指向NULL。字典hashtable:用於保存鍵值對的抽象數據結構。
  • 你到底懂不懂什麼是Linux運維工程師?
    當調查人員告訴他們科幻電影中展示黑客高超技巧時的命令行界面正是大多數運維工程師每日工作環境時,他們發出極其一致的驚嘆。相對於普羅大眾的一無所知,技術圈對運維的態度則更偏向於黑色幽默。相較於開發等工作崗位,7*24小時待命的運維工程師總是默默無聞作為守護者,當然同時還要接受「背鍋俠」這一艱巨使命。
  • Hunt Redis 1.0.0 發布,D 語言 Redis 客戶端
    Hunt Redis 是使用 D 語言開發的 Redis 客戶端,非常容易使用,API 移植自 Java 界最易用的 Redis
  • 不懂得DevOps開發運維,你未來該如何發展?
    一、下面已經不是趨勢,而是菜鳥及老鳥都必須要認真考慮的:1、運維人員要會運維、開發、資料庫、網絡,但側重點是運維。2、開發人員要會運維、開發、資料庫、網絡,但側重點是開發。新的時代對我們IT人員有了新的挑戰,我們不能抱殘守缺,而一定要快速學習,適應時代對我們的更多要求,不要本位主義,單純的認為運維就不需要開發,開發就不需要運維,這些想法都是在重複掩耳盜鈴的寓言故事。另外,強烈建議,想從事Linux運維的朋友一定要先掌握好運維崗位需要的本領後,然後再去蠶食開發領域。