team中的一個同學在其專案中使用了Redis作為緩存,將熱點資料存放在Redis中。為了提升效能,寫Redis時採用了管道的方式,平時使用時,Redis的效能、資源使用都能符合專案需求,但當訪問量增加的時候,Redis的QPS還能滿足要求,但CPU使用率高的時候已經達到90% ,平時只有30% ,眾所周知,Redis是單進程的,只能佔用1個CPU核,跑滿了也就100%,無法利用機器的多核,而當CPU跑到100%時,必然會造成效能瓶頸。怎麼解決?
推薦:《Redis影片教學》
方案一:
首先想到的是,增加Redis伺服器的數量,在客戶端對儲存的key進行hash運算,存入不同的Redis伺服器中,讀取時,也進行相同的hash運算,找到對應的Redis伺服器,可以解決問題,但是不好的地方:
第一,客戶端要改動程式碼;
第二、需要客戶端記住所有的Redis伺服器的位址;
#這個方案可以使用,但能不能不用改動程式碼就能實現擴充呢?
方案二:
搭建一個集群,由於Redis伺服器使用的版本低於3.0,不支援集群,只能透過使用代理,就想到了有名的Redis代理商twemproxy。
twemproxy的效能也是槓槓滴,雖然是代理,但它對存取效能的影響非常小,連Redis作者都推薦它。
twemproxy使用方便,對於一個新手來說,不到一個小時就能學會使用,而且關鍵是不用改動客戶端程式碼,幾乎支援所有的Redis指令和管道操作,只需要改下客戶端的設定檔中設定的Redis的IP和PORT,由原來的Redis的IP和Port改成twemproxy服務的IP和PORT。
客戶端不需要考慮hash的問題,這些twemproxy會做,客戶端就像操作一台Redis。
上面用了「幾乎」這個詞,因為有些指令,例如"keys *"就不支援
很快就部署好了twemproxy和後面跟著的四個Redis機器,壓測發現,後面的四台Redis的CPU使用率降下來了,但新問題來了,twemproxy也是單一進程的!效能瓶頸又跑到twemproxy上來了!
方案三:
對Redis的存取分為寫和讀,類似生產者和消費者, 再仔細分析,發現寫的少,讀的相對多些,這就可以將讀寫分離,寫的往主的寫,讀的從備的讀,遇到的情況恰好是讀和寫是兩個服務,做到讀寫分離通過改下配置信息就可以很簡單的做到,,這樣分散了主Redis的壓力。
這裡對Redis的訪問壓力有好轉,但不是長久之計,比如遇到舉辦活動, 數據量增大時,還是會有性能的風險。
最終採用的方法是綜合方案二和三,如下圖所示:
#這種方法對現有的服務改動最小,可以有效緩解redis壓力的問題
producer端和consumer端的twemproxy所使用的hash演算法要求一致,不然就找不到key了。
如果把方案一也加進來,會比較複雜,暫時用不到。
#以上是redis怎麼擴容的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文解決了Redis版本的兼容性挑戰。 主要版本升級由於命令,數據結構和配置的變化而引起的顯著兼容性風險。 這篇文章強調使用Redis-CLI進行徹底的測試

本文討論了在Redis群集中選擇碎片鍵,並強調了它們對性能,可伸縮性和數據分佈的影響。關鍵問題包括確保均勻數據分配,與訪問模式保持一致以及避免常見錯誤l

本文詳細介紹了檢查Redis服務器版本的方法。 它使用Redis-CLI - Version和Info Server進行比較,檢查配置文件,過程列表和軟件包管理器。 redis-cli中的信息服務器命令被確定為t

本文詳細介紹了通過命令行檢查Redis服務器版本的方法。 主要方法Redis-CLI信息服務器有效地從服務器的輸出中檢索了版本信息,提供了直接可靠的解決方案。 替代a

本文討論了在REDIS中實施和管理緩存無效的策略,包括基於時間的到期,事件驅動的方法和版本控制。它還涵蓋了緩存到期的最佳實踐和監視和自動的工具

本文詳細介紹了Redis版本號,其字符串數據類型以及用於檢查版本的方法(使用Redis-CLI,配置文件或編程方式)。 它還探討了主要版本之間的差異,重點是增強性能

本文討論了使用REDIS進行工作隊列和背景處理,詳細的設置,作業定義和執行。它涵蓋了原子運營和工作優先級等最佳實踐,並解釋了REDIS如何提高處理效率。

本文討論了在REDIS中實施身份驗證和授權,重點是實現身份驗證,使用ACL以及確保REDIS的最佳實踐。它還涵蓋了管理用戶權限和工具以增強重新安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)