Redis中的數據對象

NoSQL Redis 技術 IT優就業 2017-06-27

redis對象

redis中有五種常用對象

我們所說的對象的類型大多是值的類型,鍵的類型大多是字符串對象,值得類型大概有以下幾種,但是無論哪種都是基於redisObject實現的

redisObject的結構如下

Redis中的數據對象

type的可選值有五種.分別是

Redis中的數據對象

encoding的可選值有八種

Redis中的數據對象

字符串對象

字符串對象的編碼可以是int,embstr和row

redis中的字符串對象是最常用的數據對象之一,redis中的許多鍵都是採用的字符串對象

字符串類型在redis中根據情況不同有3中情況

  1. 對於元素都是純數字類型的, 例如,'1','2'這種會使用int類型存儲,redis默認初始化了10000個數字對象

  2. 對於長度小於32的字符串類型,例如'hello',redis會使用embstr類型存儲數據

  3. 對於長度超過32的使用row存儲原字符

ps: embstr類型的字符串在修改後總會變成row編碼類型

列表

列表的編碼可以是linkedlist或者ziplist

  1. 當列表對象保存的所有字符串長度小於64字節

  2. 當列表對象保存的元素數量小於512個的時候

這個時候會使用,ziplist來作為列表對象的編碼, 當不滿足這兩個條件的時候使用linkedlist

ps:這兩個值是更改的,list-max-ziplist-value 和 list-max-ziplist-entries

哈希對象

哈希對象的編碼可以是ziplist或者hashtable

字典的每一個鍵和值都是一個字符串對象

  1. 哈希對象保存的所有鍵和值的長度都小於64字節

  2. 哈希對象保存的鍵值對數量小於512個的時候

滿足以上兩個條件,使用ziplist存儲,否則採用hashtable存儲

ps:這兩個值是更改的,hash-max-ziplist-value 和 hash-max-ziplist-entries

集合

集合對象的編碼可以是intset或者hashtable

當集合對象滿足以下兩個條件的時候採用intset

  1. 集合對象保存的元素都是整數

  2. 集合對象保存的元素數量不超過512個

不滿足以上兩個條件都是用hashtable存儲

ps: 該數值可以使用set-max-intset-entries設置

有序集合

有序集合對象的編碼可以是ziplist或者skiplist

有序集合對象跟前面的幾個對象不大一樣

Redis中的數據對象

zsl中保存一個跳躍表,表節點的對象即使鍵,score即是分值,該結構主要為 zrange,zrank等函數服務

同時還保存一個dict,dict中也保存有鍵和對應的分值,獲取某鍵的函數zscore使用這個結構,

同時持有字典和跳躍表是為了性能考慮

當有序集合滿足一下兩個條件時候,使用ziplist編碼

  1. 有序集合元素數量小於128

  2. 有序集合元素長度小於64

不能滿足以上兩個條件的使用skiplist

回收

redis的對象資源垃圾回收是基於引用計數

當一個對象被使用一次,引用計數增加1

當一個引用被銷燬,對象的引用計數會減1

當一個對象的引用計數為0,會被銷燬

對象共享

redis默認創建了0到9999的數字對象供1萬個

其他用到這些對象的時候可以不用創建新對象,直接使用已有的對象

500萬陽光基金助力就業季:

http://www.ujiuye.com/zt/jyfc/?wt.bd=fq37300j

更多幹貨請關注優就業官網:

http://www.ujiuye.com/?wt.bd=fq37300j

相關推薦

推薦中...