共計 1593 個字符,預計需要花費 4 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章給大家分享的是有關 Redis 進程內消耗的是什么的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考。一起跟隨丸趣 TV 小編過來看看吧。
Redis 進程內消耗主要包括:自身內存 + 對象內存 + 緩沖內存 + 內存碎片。
內存。因為 redis 的數據都是存儲在內存當中。內存數據庫相比一般的關系型數據庫,讀取速度要更快,但是消耗的內存資源會更多。
對象內存
對象內存是 Redis 內存占用最大的一塊,存儲著用戶所有的數據。Redis 所有數據都采用 key-value 數據類型,每次創建鍵值對時,至少創建兩個類型對象:key 對象和 value 對象。內存消耗可以簡單的理解為 sizeof(keys)+sizeof(values)。鍵對象都是字符串,在使用 Redis 時很容易忽略鍵對內存消耗的影響,應當避免使用過長的鍵。value 對象更復雜些,主要包括 5 種基本數據類型:字符串、列表、哈希、集合、有序集合。每種 value 對象類型根據使用規模不同,占用內存不同。在使用時一定要合理預估并監控 value 對象占用情況,避免內存溢出。
緩沖內存
緩沖內存主要包括:客戶端緩沖、復制積壓緩沖區、AOF 緩沖區。
客戶端緩沖指的是所有接入到 Redis 服務器 TCP 連接的輸入輸出緩沖。輸入輸出緩沖無法控制,最大空間為 1G,如果超過將斷開連接。輸入緩沖通過參數 client-output-buffer-limit 控制:
1. 普通客戶端:除了復制和訂閱的客戶端之外的所有連接,Redis 的默認配置是:client-output-buffer-limit normal 0 0 0,Redis 并沒有對普通客戶端的輸出緩沖區做限制,一般普通客戶端的內存消耗可以忽略不計,但是當有大量慢連接客戶端接入時這部分內存消耗就不能忽略了,可以設置 maxclients 做限制。注意不要只用大量數據輸出的命令且數據無法及時推送給客戶端,如 monitor 命令,容易造成 Redis 服務器內存突然飆升。
從客戶端:主節點會為每個從節點單獨建立一條連接用于命令復制,默認配置是:client-output-buffer-limit slave 256mb 64mb 60。當主從節點之間網絡延遲較高或主節點掛載大量從節點時這部分內存消耗將占用很大一部分,建議主節點掛載的從節點不要多于 2 個,主從節點不要部署在較差的網絡環境下,如異地跨機房,防止復制客戶端連接緩慢造成溢出。
訂閱客戶端:當使用發布訂閱功能時,連接客戶端使用單獨的輸出緩沖區,默認配置為:client-output-buffer-limit pubsub 32mb 8mb 60,當訂閱服務的消息生產快于消費速度時,輸出緩沖區會產生積壓造成輸出緩沖區空間溢出。
復制積壓緩沖區:Redis 在 2.8 版本之后提供了一個可重用的固定大小緩沖區用于實現部分復制功能,根據 repl-backlog-size 參數控制,默認為 1MB。對于復制積壓緩沖區整個主節點只有一個,所有從節點共享此緩沖區,因此可以設置較大的緩沖區空間,如 100MB。
AOF 緩沖區:這部分空間用于在 Redis 重寫期間保存最近的寫入命令。
3. 內存碎片
Redis 默認的內存分配器采用 jemalloc,可選的分配器還有:glibc、tcmalloc。內存分配器為了更好地管理和重復利用內存,分配內存策略一般采用固定范圍的內存塊進行分配。
以下場景容易出現高內存碎片問題:
頻繁做更新操作,例如頻繁對已存在的鍵執行 append、setrange 等更新操作。
大量過期鍵刪除,鍵對象過期刪除后,釋放的空間無法得到充分利用,導致碎片率上升。
感謝各位的閱讀!關于 Redis 進程內消耗的是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
向 AI 問一下細節
丸趣 TV 網 – 提供最優質的資源集合!