【Redis】初探dict字典原理的实现(二)

时间颇为仓促,以下简单概括一下dict的基础与核心的知识点:

1. 应用范围: redis中字典的应用范围非常广泛;  数据库的键空间, hash类型等都是通过字典来实现的.

2. rehash: 内部维持了两个hashtable, ht[0]为当前所用到的存储ht; 

                    如果正在rehasing, 那么ht[0]会有部分数据迁移到ht[1]; 如果rehash完成, ht[1]将会成为ht[0], 而新的ht[1]将重新初始化;

                   rehash是自动进行的, 如果填充率过高(即节点数量比可用bucket多得多时)而超过预设值时,将会进行reash;

                   rehash过程是分步而不是一次来完成的,可以有效减少阻塞时长.

3. resize:   体积缩小的规则与rehash是类似的,最大不同之处是resize是需要程序手动调起的, 而rehash可以自动进行.

4. 安全迭代器与非安全迭代器: 非安全迭代器只能进行Get等读的操作, 而安全迭代器则可以进行iterator支持的任何操作.                  

    由于dict结构中保存了safe iterators的数量,如果数量不为0, 是不能进行下一步的rehash的; 因此安全迭代器的存在保证了遍历数据的准确性;

    在非安全迭代器的迭代过程中, 会通过fingerprint方法来校验iterator在初始化与释放时字典的hash值是否一致; 如果不一致说明迭代过程中发生了非法操作.

5. 字典中的hash表通过链地址法来解决键的冲突问题.


                   

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值