記憶。 因為redis數據是保存在內存中的。 與一般關系型數據庫相比,內存數據庫的讀取速度更快,但消耗的內存資源也更多。
對象內存(推薦學習:Redis視頻教程)
對象內存是Redis內存中最大的一塊,存儲所有用戶數據。 Redis中的所有數據都采用key-value數據類型。 每次創建鍵值對時,至少會創建兩種類型對象:鍵對象和值對象。 內存消耗可以簡單理解為(keys)+()。 關鍵對象都是字符串。 使用Redis時,很容易忽略key對內存消耗的影響。 您應該避免使用太長的鍵。 值對象比較復雜,主要包括5種基本數據類型:字符串、列表、哈希、集合、有序集合。 每個值對象類型根據使用規模占用不同的內存。 使用時必須合理估計和監控值對象占用情況,避免內存溢出。
緩沖存儲器
緩沖存儲器主要包括:客戶端緩沖區、復制積壓緩沖區、AOF緩沖區。
客戶端緩沖是指與Redis服務器的所有TCP連接的輸入和輸出緩沖。 輸入和輸出緩沖區無法控制。 最大空間為1G。 如果超過,連接將被斷開。 輸入緩沖由參數 ---limit 控制:
1、普通客戶端:對于除復制和訂閱客戶端之外的所有連接rddis主要消耗什么物理資源,Redis的默認配置為: ---limit 0 0 0。Redis不限制普通客戶端的輸出緩沖區。 一般情況下,普通客戶端的輸出緩沖區內存消耗可以忽略不計,但是當連接大量慢速連接客戶端時,這部分內存消耗就不能忽略了,可以設置限制。 注意不要只使用輸出大量數據的命令,導致數據無法及時推送到客戶端。 此類命令很容易導致Redis服務器的內存突然激增。
從客戶端:主節點會為每個從節點建立單獨的連接,用于命令復制。 默認配置為: ---limit Slave 256mb 64mb 60。當主從節點之間的網絡延遲較高或者主節點掛載大量從節點時,這部分內存消耗會占據很大一部分。 建議主節點掛載不超過2個從節點,并且主從節點不要部署在較差的位置。 在一定的網絡環境下,比如跨不同機房,防止復制客戶端連接速度慢導致溢出。
訂閱客戶端:使用發布訂閱功能時,連接客戶端使用單獨的輸出緩沖區。 默認配置為: ---limit 32mb 8mb 60。當訂閱服務的消息生產速度快于消費速度時,就會產生輸出緩沖區。 積壓導致輸出緩沖區空間溢出。
復制積壓緩沖區:Redis在2.8版本之后提供了可重用的固定大小緩沖區來實現一些復制功能。 根據repl--size參數控制,默認為1MB。 整個主節點只有一個復制積壓緩沖區,所有從節點共享這個緩沖區,因此可以設置較大的緩沖區空間,比如100MB。
AOF緩沖區:這部分空間用于保存Redis重寫時最近的寫入命令。
3、內存碎片
Redis 使用默認的內存分配器。 可選分配器包括:glibc。 為了更好的管理和復用內存,內存分配器一般使用固定范圍的內存塊來分配內存。
以下場景容易出現內存碎片高的問題:
頻繁執行更新操作rddis主要消耗什么物理資源,例如對現有的key頻繁執行更新操作等。
大量過期密鑰被刪除。 關鍵對象過期刪除后,釋放的空間無法充分利用,導致碎片率增加。