02 Redis記憶體劃分

2021-10-04 09:43:57 字數 1048 閱讀 4297

redis作為記憶體資料庫,在記憶體中儲存的主要內容是資料(鍵值對)

資料是redis中儲存的主要內容,這部分占用的記憶體會統計在used_memory中

redis使用鍵值對儲存資料,其中的值(物件)包含5種型別,即字串、雜湊、列表、集合、有序集合。

這5種型別是redis對外提供的,實際上,在redis內部,每種型別可能有2種或更多的內部編碼實現

此外,redis在儲存物件時,並不是直接將資料扔進記憶體,而是會對物件進行各種包裝:如redisobject、sds等;

redis主程序本身執行肯定需要占用記憶體,如**、常量池等等;這部分記憶體大約幾兆,在大多數生產環境中與redis資料占用的記憶體相比可以忽略。這部分記憶體不是由jemalloc分配,因此不會統計在used_memory中。

除了主程序外,redis建立的子程序執行也會占用記憶體,如redis執行aof、rdb重寫時建立的子程序。當然,這部分記憶體不屬於redis程序,也不會統計在used_memory和used_memory_rss中。

緩衝記憶體包括客戶端緩衝區複製積壓緩衝區aof緩衝區等

這部分記憶體由jemalloc分配,因此會統計在used_memory中

記憶體碎片是redis在分配、**物理記憶體過程中產生的。

例如,如果對資料的更改頻繁,而且資料之間的大小相差很大,可能導致redis釋放的空間在物理記憶體中並沒有釋放,但redis又無法有效利用,這就形成了記憶體碎片。

記憶體碎片不會統計在used_memory中。記憶體碎片的產生與對資料進行的操作、資料的特點等都有關

如果記憶體分配器設計合理,可以盡可能的減少記憶體碎片的產生。

如果redis伺服器中的記憶體碎片已經很大,可以通過安全重啟的方式減小記憶體碎片:因為重啟之後,redis重新從備份檔案中讀取資料,在記憶體中進行重排,為每個資料重新選擇合適的記憶體單元,減小記憶體碎片。

02 Redis 鍊錶

本文內容均來自 redis設計與實現 一書 鍊錶提供了高效的節點重排能力,以及順序性的節點訪問方式,並且可以通過增刪節點來靈活地調整鍊錶地長度。列表鍵地底層實現之一就是鍊錶。當乙個列表鍵地包含了數量較多的元素,或者列表中包含的元素都是比較長的字串時,redis就會使用鍊錶作為列表鍵的底層實現。鍊錶在...

Redis學習筆記02 Redis的安裝

安裝環境 ubuntu16虛擬機器,win7主機,securecrt遠端登入,redis 2.4.17.tar.gz 步驟1 步驟2,編譯源程式 解壓 tar zxvf redis 2.4.17.tar.gz 進入redis目錄 cd redis 2.4.17 makefile make 進入src...

Redis學習筆記 02 Redis基礎操作

一 啟動redis 有三種方法啟動redis 預設配置 執行配置 配置檔案啟動。1 預設配置 這種方法會使用redis的預設配置來啟動,下面就是redis server執行後輸出的相關日誌 可以看到直接使用redis server啟動redis後,會列印出一些日誌,通過日誌可以看到一些資訊,上例中可...