字串物件如果儲存的是整數值,編碼為int。
字串物件如果儲存的是長度大於32位元組的字串,編碼為raw。
字串物件如果儲存的是長度小於等於32位元組的字串,編碼為embstr。
embstr呼叫一次記憶體分配函式分配一塊連續的空間存放redisobject和sdshdr。
raw需要呼叫兩次分別分配redisobject和sdshdr的記憶體空間。
浮點數型別也是按照字串值儲存。
列表物件儲存的元素長度都小於64位元組,並且元素數量小於512個時,編碼為ziplist。
反之,編碼為linkedlist。
雜湊物件儲存的元素長度都小於64位元組,並且元素數量小於512個時,編碼為ziplist。
反之,編碼為hashtable。
集合物件儲存的所有元素都是整數值,並且元素數量不超過512個時,編碼為intset。
反之,編碼為hashtable。
有序集合儲存的元素數量小於128個,長度都小於64位元組,編碼為ziplist。
反之,編碼為skiplist。
skiplist編碼的有序集合物件使用zset結構實現,乙個zset包含乙個字典和乙個跳躍表。
字典和跳躍表只儲存乙份元素的成員和分值,通過指標來實現共享元素。
字典根據成員查詢分值效率高,跳表範圍操作效率高,所以使用二者結合。
部分命令只能對特定物件型別執行。在執行特定命令時,redis先會檢查型別是否正確。
根據物件的編碼確定呼叫不同的命令函式實現多型。
引用計數實現記憶體**。
在redis中讓多個鍵的值指標指向乙個物件,並在共享的值物件的引用計數值加1。
lru記錄物件最後一次被訪問的時間。
Redis物件 Redis物件系統簡介
最新 redis記憶體 三個重要的緩衝區 最新 redis記憶體 記憶體消耗 記憶體都去哪了?最新 redis持久化 如何選擇合適的持久化方式 最新 redis持久化 aof日誌 之前幾篇文章,簡單介紹 redis用到的所有主要資料結構,簡單動態字串 sds 雙端鍊錶 字典 壓縮列表 整數集合 跳躍...
Redis記憶體模型
五 理解記憶體 1.記憶體消耗 1 物件記憶體 redis所有資料均採用keyvalue資料型別,每次建立鍵值對時,至少建立兩個型別物件 key物件和value物件,物件記憶體 sizeof keys sizeof values key物件均為字串,value物件包括 string hash lis...
Redis記憶體模型
3.4.1 refcount與共享物件 緩衝區溢位 使用c字串的api時,如果字串長度增加 如strcat操作 而忘記重新分配記憶體,很容易造成緩衝區的溢位 而sds由於記錄了長度,相應的api在可能造成緩衝區溢位時會自動重新分配記憶體,杜絕了緩衝區溢位。修改字串時記憶體的重分配 對於c字串,如果要...