redis學習筆記(9)---對象robject

來源:互聯網
上載者:User

標籤:

robject

  之前對redis基本的資料結構分別進行了簡單的介紹,包括字串、鏈表、雜湊表、整數集合、壓縮列表、壓縮字典等,但是redis並不是直接使用這些資料結構來實現key-value對資料庫的,而是基於這些資料結構為每一個對象建立一個對象robject。robject對象再根據資料類型,來選擇合適的底層資料結構來儲存資料。

robject的定義如下:  
typedef struct redisObject {    unsigned type:4;    unsigned encoding:4;    unsigned lru:REDIS_LRU_BITS; /* lru time */    int refcount;    void *ptr;} robj;
  • type:4bit,對象的類型
  • encoding:4bit,對象的編碼方式
  • lru:24bit,記錄訪問時間
  • refcount:引用計數
  • ptr:指向具體的資料
1)類型

  對象的類型共有5種可選類型:  

/* Object types */#define REDIS_STRING 0#define REDIS_LIST 1#define REDIS_SET 2#define REDIS_ZSET 3#define REDIS_HASH 4

  在redis中,key-value對中的鍵總是字串類型的,只有值可以是多種類型中的一種,因此當我們稱一個鍵為“字串鍵”時,是指這個鍵對應的value是字串類型的。

2)編碼方式

  對象共有9種編碼方式,每種類型可以有多種不同的編碼方式:

#define REDIS_ENCODING_RAW 0     /* Raw representation */#define REDIS_ENCODING_INT 1     /* Encoded as integer */#define REDIS_ENCODING_HT 2      /* Encoded as hash table */#define REDIS_ENCODING_ZIPMAP 3  /* Encoded as zipmap */#define REDIS_ENCODING_LINKEDLIST 4 /* Encoded as regular linked list */#define REDIS_ENCODING_ZIPLIST 5 /* Encoded as ziplist */#define REDIS_ENCODING_INTSET 6  /* Encoded as intset */#define REDIS_ENCODING_SKIPLIST 7  /* Encoded as skiplist */#define REDIS_ENCODING_EMBSTR 8  /* Embedded sds string encoding */

  例如,當我們在用戶端執行set msg “hello”命令時,那麼在資料庫中就會產生一個key-value對。redis會分別為key和value建立一個對象robject,對象的類型為字串類型REDIS_STRING,對象的編碼方式為REDIS_ENCODING_EMBSTR。當字串長度較長時,則對象的編碼方式會變為REDIS_ENCODING_RAW
  

命令

  http://doc.redisfans.com/
  這個網站對redis資料庫中命令進行了總結。
  可以發現,對於不同的命令,底層會以不同的資料結構來實現,即不同的命令會導致對象的類型不同。
  如執行set、get等命令時,產生的對象就是字串類型的。然後底層根據對象的長度來選擇合適的編碼方式。
  當執行hset、hget命令時,產生的對象就是雜湊表類型的,然後再根據具體對象來選擇不同的編碼方式。



本文所引用的源碼全部來自Redis3.0.7版本

redis學習參考資料:
https://github.com/huangz1990/redis-3.0-annotated
Redis 設計與實現(第二版)
  
 
  
  

redis學習筆記(9)---對象robject

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.