Redis底层的几种数据结构

在redis中有五种对象,分别是字符串对象,列表对象,哈希对象,集合对象,有序集合对象。五种对象的具体实现对应六种不同的存储结构,redis支持在不同的数据规模下为每种对象选取不同的存储结构,以达到最好的适应性。下面先介绍六种底层存储结构。

 

SDS简单动态字符串

redis用来存储字符串的数据结构,可以看作是一个vector维护的字符数组。和C字符串的区别在于存了字符长度,保证不会缓冲溢出(类似vector的resize操作),针对可能的频繁数据修改进行空间预分配,和stl中的string一样是二进制安全的。

预分配策略具体分为两个部分。如果SDS进行修改之后,长度小于1mb,那么将预留一倍的空间,类似vector的分配策略。如果修改后长度大于1mb,那么将预留1mb的空间,减少内存占用。

二进制安全是指可以存储‘\0’字符,因为在使用中SDS不以字符串中的‘\0’作为结尾。

List链表

redis中的链表是无环双向链表,STL中是环形双向链表。包含两个结构体,listNode和list,其中list中存着链表的头结点,尾节点,链表长度。listNode中保存前后指针和对象指针。redis中的链表是多态的,它使用void*指针保存节点值。

hashmap字典

redis中字典用哈希表实现,哈希表的数据结构如下

typedef struct dictht
{
    dictEntry **table;
    unsigned long size;
    unsigned long sizemask;
    unsigned long used
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值