[redis] hashmap数据结构

[redis] hashmap数据结构一、描述

大家好,又见面了,我是你们的朋友全栈君。

一、描述

redis的其中一个数据类型为hashmap,即散列表

正常实现hashmap:

1.分配固定大小的桶,大小为n

2.计算key的hash值,并且与n取模,得到在桶的索引位置index

3.根据2中计算的index,然后存放在对应的桶中

4.当遇到碰撞情况,则会通过链表来解决碰撞问题

二、redis中数据结构定义

[redis] hashmap数据结构

struct dictht:为hash table的实际实现结构

struct dict:为hash table的外层封装,主要一个作用是当当前使用dictht需要进行rehash的时候,其会创建新的dictht,并且会在词请求的时候,完成一部分的搬运工作

[redis] hashmap数据结构

struct dictEntry:为每个桶,其中的next为解决冲突的链表

三、rehash:

redis的散列表和正常的散列表实现没有太大区别,唯一的区别是在rehash-即需要重新扩容的情况有所区别

正如我们所知,redis是单进程单线程模式,那么对于rehash如果一次性完成数据的搬运的,在数据量大的时候,会是

很耗时的操作,因此redis并不是一次性搬运完所有的数据,而是在每次请求的时候,都会触发搬运工作,

但是搬运的数据都是一小部分而已。

1.lazy rehash,每次操作dict的时候,会搬运一个slot到新的hashmap

2.active rehash,每过一段时间便会进行数据的搬运

四、小点:

在使用hashmap的时候,并不是说每次redis都会直接用散列表的方式来存储数据,因此在单独使用key-value,value作为hashmap使用的时候,

很可能只是用于存放简单而且少量的数据,因此处于对内存消耗和性能等综合考量,在一开始redis会通过ziplist(压缩双向链表来存储数据)相关链接

而控制什么时候会采用hashmap来存储,可以通过参数来控制:

hash-max-ziplist-entries 512(ziplist最大存储entry的数量)

hash-max-ziplist-value 64(ziplist最大一个entry存储的字节数)

凡是超过这两个限制,都会讲ziplist转换为hashmap

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144718.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Vue的安装及使用快速入门

    Vue的安装及使用快速入门Vue的安装及使用快速入门

  • 安装phpMyAdmin图文教程-学习(转载)

    安装phpMyAdmin图文教程-学习(转载)phpmyadmin的安装配置已经是老生常谈的话题了,网络上到处都可以找到相关的配置教程。但是,那些大多都是手动配置的,稍不留神,容易出错。因此站长今天在这里介绍的是,被很多phpmyadmin用户所忽略的phpmyadmin自带的安装程序,下面我们就开始一步一步来安装phpmyadmin。1、…

  • 三极管饱和及深度饱和状态的理解和判断!

    三极管饱和及深度饱和状态的理解和判断!三极管饱和问题总结:1.在实际工作中,常用Ib*β=V/R作为判断临界饱和的条件。根据Ib*β=V/R算出的Ib值,只是使晶体管进入了初始饱和状态,实际上应该取该值的数倍以上,才能达到真正的饱和;倍数越大,饱和程度就越深。2.集电极电阻越大越容易饱和;3.饱和区的现象就是:二个PN结均正偏,IC不受IB之控制问题:基极电流达到多少时三极管饱和?解答:这个值应该是不固定的,它和

  • Android开发:用adb命令安装apk到手机

    Android开发:用adb命令安装apk到手机一、首先需要准备一个apk以及真机(我们以真机为例,就不说明模拟器了),然后adbdevices查看手机是否连接,直接输入adbdevices即可,如图:显示上图信息,说明连接成功,就可以推送安装apk了。如果出现下图,则可参照https://blog.csdn.net/y201314an/article/details/81022556进行修改环境变量…

  • vsftp账号_Vsftp用户限制

    vsftp账号_Vsftp用户限制背景Oracle全库备份,异地备份在实现异地备份后,由第三方人员登录服务器拉取dmp文件.为了确保安全,创建一个特定ftp账号用于第三方人员使用要求1.可以登录服务器2.可以拉取dmp文件3.仅限在dmp文件的目录下,不能cd其他路径,ls其他目录解决过程yum安装ftp服务[root@78778e06dc0a/]#yuminstallvsftpd-y修改vsftp配置文件,开启限制[…

    2022年10月26日
  • emoji的表情包_emoji每个表情对照表

    emoji的表情包_emoji每个表情对照表?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

    2022年10月25日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号