一文学习redis底层数据结构

string
    int: 数值作为redisObject的指针地址。
    raw: redisObject + sdshdr,指针指向sdshdr,redisObject里面保存指针。(Simple Dynamic String, SDS),字符串修改时,尽量使用set代替append、setrange,降低预分配带来的内存浪费和内存碎片。
    embstr: redisObject + sdshdr一起申请一块连续的内存,适合于短字符串。
    
hash
    ziplist:采用一块连续内存模拟的双向链表,为了均衡内存使用率和性能,不需要每次申请内存,也省去了next指针的空间的内存开销,pre指针的开销并没有省掉。一般要求节点数小于1000吧。
    hashtable:和jdk的HashMap类似,但是会有两张hash表,为了防止性能突变,采取渐进式搬移,而不是一次全部切到新表;并且未引入红黑树。

list
    ziplist
    linkedlist:普通的双向链表。
    quicklist:类似于跳表,但是又不完全一样。将ziplist作为双向链表的节点,融合了两者的优点。
    
set
    intset:一块连续的内存,有序整数,并且要求整数的长度一致。
    hashtable

zset
    ziplist
    skiplist:跳表(为什么不使用红黑树,跳表可以更好的范围查询,参考:redis——为什么选择了跳表而不是红黑树?_hebtu666-CSDN博客_跳表和红黑树区别

redis字典本身也是采用hashtable来存储的,需要扩容、缩容、rehash。
参考:Redis的内部扩容机制 - 简书 (jianshu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值