Redis 設計與實現 (一)--資料結構

K戰神發表於2018-01-17

底層資料結構:動態字串、字典、整數集合、雙端連結串列、壓縮列表

字串物件:

  int    浮點數值

  raw  字串值>32位元組

  embstr   字串值<32位元組

字串編碼轉換:

  int => raw    int追加的值為字串

  embstr => raw    embstr任何修改

列表物件:

  ziplist   底層 - 壓縮列表

  linkedlist  底層 - 雙向連結串列

雜湊物件:

  ziplist 底層 - 壓縮列表

         新加鍵值對,先將鍵打入壓縮列表的表尾,然後同樣方式儲存值。

      同一個鍵值對挨在一起,鍵值對有先來後到。

 

    雜湊物件所有鍵值對的字串長度<64位元組

    雜湊物件所有鍵值對數量<512個

 

  hashtable  底層 - 字典

      字典鍵和值都是字串物件。

 

集合物件:

  intset  底層 - 整數集合

     集合物件儲存的都是整數值

     不超過512個元素

  hashtable 底層 - 字典 

 

有序集合物件:

   ziplist  底層 - 壓縮列表  按照元素分值排序

      元素長度<64位元組

      元素個數<128

   skiplist 底層 -  zset結構(字典+跳躍表) 

 

型別檢查和命令多型

  操作鍵:del  explre  rename  type  object

  字串鍵:set  get  append  strlen

  雜湊鍵:hdel  hset  hget  hlen

  列表鍵:rpush  lpop  linsert  llen

     集合鍵:sadd  spop  sinter  scard 

  有序集合:zadd  zcard  zrank  zscore  

 

型別檢查: redisObject  type

多型命令

記憶體回收:引用計數

物件共享:將資料庫鍵的值指標指向現有的值物件。

     共享值引用計數+1

物件的空轉時長:

     lru   物件最後一次被命令訪問的時間

     object idletime  空轉時間

相關文章