赞
踩
首先,SDS 主要通过 未使用空间来实现的。
len
属性,当 len<1MB
时,会分配 len
的未使用空间;否则分配 1MB
。如果未使用空间,足以放下修改后的字符,
len
是不会发生变化的。也就是说,空间的预分配把字符的重分配次数从 N 次,降为 最多 N 次。
因为 SDS 主要利用 buffer + len + free
,表示字符串,由底层的字符数组 buf
存储字符,len
表示有效的字符长度,程序不会对 buffer
中数据进行任何的限制、过滤或者假设等操作。
对象也就是 redis 在底层数据结构之上包装的一层 RedisObject(对象),常见的 RedisObject 有五种:字符串对象、列表对象、哈希对象、集合对象和有序集合对象。
使用 RedisObject 的优点主要有两个,分别是:
typedef struct redisObject {
// 类型
unsigned type:4;
// 编码
unsigned encoding:4;
// 指向实际值的指针
void *ptr;
...
} robj;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。