zoukankan      html  css  js  c++  java
  • redis-原理-数据结构-字典(三)

    redis字典实现

    redis字典使用hash表作为底层实现,一个hash表有多个hash节点,每个hash表保存了字典的一个键值对。

    结构定义

    字典定义

    type和privdata属性是针对不同类型的键值对为创建多态字典而产生

    1.type属性指向了一个dicType结构指针,每个dictType结构保存一簇用于操作特定类型键值对函数,redis会为不同类型的字典设置不同的特定类型函数

    2.privdata则保存了传给那些特定函数的可选参数

    3.ht属性包含2项的数组,每个项都是一个dicthat hash表,一般情况只会使用h[0].h[1]只会在h[1]rehash的时候使用

    4.trehashidx他记录了当前rehash的进度,如果没有rehash则是-1

    dictType定义

     

    hash表定义

    1.table是一个hash数组,每个元素都是dicthtEntiry节点

    hash表结构例子

    hash表节点定义

    hash表如何解决hash碰撞的 

    因为hash表是存储的dictEntry数组,通过hash算法算出放到具体索引下,但是同一个key可能计算出同一个hash。

    当出现这种情况dictEntry 的next属性就会指向另外一个hash的地址。以此来解决hash碰撞,当出现每次hash碰撞,都会将新的hash放在头部,所以插入是0(1)

    字典插入一个元素做了哪些事情

    字典所使用的hash算法

    字典是如何进行rehash的

    为什么要rehash

    普通没有进行rehash的字典结构

    rehash步骤例子

    字典rehash时机

    字典API的复杂度

  • 相关阅读:
    在Linux下删除文件及文件夹(rm)
    修改Linux文件权限
    文件分页显示(ls -al |more)
    linux的文件权限
    Linux中的重启(reboot)
    linux关机前同步数据(sync)
    hdu4990 Reading comprehension 矩阵快速幂
    hdu4965 Fast Matrix Calculation 矩阵快速幂
    hdu4847 Wow! Such Doge! KMP
    hdu4705 Y 树形DP
  • 原文地址:https://www.cnblogs.com/LQBlog/p/14494469.html
Copyright © 2011-2022 走看看