Redis中所有数据都存储在对象中,Redis共有5种对象:字符串对象、列表对象、哈希对象、集合对象、有序集合对象。每一种对象都至少有两种底层编码方式。
本文介绍这5种对象的底层编码和编码转换原理。基于Redis2.9版本。
Redis对象基本知识
Redis使用对象
来表示数据库中的键和值,每一个键值对都是两个对象:键
作为一个对象、值
作为一个对象。其中键
总是一个字符串对象,值
是5种对象之一:字符串
对象、列表
对象、哈希
对象、集合
对象、有序集合
对象。
Redis任何一种对象都使用redisObject结构来表示:
typedef struct redisObject{
// 对象类型,五种对象之一:字符串、列表、哈希、集合、有序集合
unsigned type 4;
// 对象的编码方式,以下之一:简单动态字符串、双端链表、字典、压缩列表、整数集合
unsigned encoding 4;
// 底层数据结构指针,即指向真实存储的“值”
void