你了解python 字典的实现原理和 redis 的哈希原理吗?

  1. python 字典:

    1. 当我们 使用 d = {} 创建字典时,其实python是创建了一个长度为8的数组。

    2. 当我们插入key,也就是创建键值对时,给字典的key计算一个哈希值,将哈希值转换成十进制后,通过与8进行取余操作,计算出这个key的位置。

      • python 字典的哈希碰撞:

        例:d['a'] = 123	d['z'] = 123 
        当我们给这两个key寻找位置时,假如算出来的位置值一样,hash('a')=4  hash('z')=4
        此时就出现了哈希碰撞。
        

        解决方案:

        • python 是开放地址法:将得到的位置值加上偏移量,再次进行位置值计算

          例:hash(4 + 偏移量) = new_value

        • python 的扩容原理:

          1. 已经使用的座位大于三分之二进行扩容,当座位小于50000时,四倍四倍的扩,大于50000时,两倍两倍的扩。
          2. 当扩容结束后,会触发座位重排,旧数组中的元素重新计算位置,用新位置存储到新数组中。
  2. redis 哈希

    • redis 的哈希碰撞

      • 解决方案:

        单链法

      • 扩容原理:

        userd / len(数组) >1 可能扩 >5 肯定扩

        第一个大于 userd * 2的 2的n次方 以4为例 2的3次方大于4 则使用2的3次方

        rehash -> 渐进式 rehash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值