redis 数据结构-对象机制
ddatsh
外/内部类型(数据结构)
-
外部类型:用户在与 Redis 交互时使用的类型,它们是 Redis 对外提供的 API 接口
字符串(string)、哈希(hash)、列表(list)、集合(set)、有序结合(zset)等
-
内部类型:Redis 内存实际存储数据的方式,使用不同的内部数据结构来优化不同类型数据的存储和访问效率
前后分离,如果有更好的内部数据类型,可以替换后面的数据类型,而不影响前面的Api
查看
-
外部 type
127.0.0.1:6379> set name dd OK 127.0.0.1:6379> type name string
127.0.0.1:6379> hset user name dd (integer) 1 127.0.0.1:6379> type user hash
-
内部 object encoding
127.0.0.1:6379> set id 123 OK 127.0.0.1:6379> object encoding id "int" 127.0.0.1:6379> set name dd OK 127.0.0.1:6379> object encoding name "embstr"
string
对应数据内部存储结构分为三种
int:8个字节的长整形
embstr:<=44个字节的字符串
raw:>44个字节的字符串
string 类型根据当前字符串的长度来决定到底使用哪种内部数据结构
redisObject
struct redisObject {
unsigned type:4; // 对象
unsigned encoding:4; // 对象编码方式(底层实现)
unsigned lru:LRU_BITS; // LRU 时间(相对于 server.lruclock)
int refcount;
void *ptr;
};