白话Redis底层存储

RedisDb

Redis服务器上可以有多个Redis数据库。

每个数据库在底层都是一个RedisDb对象。这个对象的一个重要属性是dict。

dict是一个指针,指向了字典(dict)对象。

字典对象

有什么用?

存储键值对。

其中,键必须是字符串对象,值可以是任意类型的对象。

是怎么实现的?

用哈希表实现。

哈希表在底层由多个桶组成,每个桶都是一个链表。相同哈希值的元素(指键值对)会被放到一个桶中。

对Redis对象的增删改查,在底层是怎么实现的?

因为字典对象基于哈希表实现,添加元素时根据元素的键的哈希值定位到对应的桶,然后将元素作为一个dictEntry结构插入桶的链表中。这个 dictEntry 结构体包含了指向键的指针和指向值的指针。

对应的时间复杂度为O(1)。

根据元素的键的哈希值找到对应的桶,然后在桶的链表中查找dictEntry结构体并删除。

对应时间复杂度为O(1)。

根据元素的键的哈希值找到对应的桶,然后在桶的链表中查找dictEntry 结构体并更新。

对应的时间复杂度为O(1)。

根据元素的键的哈希值找到对应的桶,然后在桶的链表中查找dictEntry 结构体。

对应的时间复杂度为O(1)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值