[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)
blank

相关推荐

  • html5div居中属性,html怎样让div居中

    html5div居中属性,html怎样让div居中html让div居中的方法:1、通过加“内容”标签让div居中;2、在div中加入“margin:0auto属性;”自动调节居中。本文操作环境:windows7系统、HTML5&&CSS3版、DellG3电脑。DIV居中提供两个方法:1、简单快捷方法就是加内容标签。示例:center居中我要居中啦2、div中加入margin:0auto属性;自动调节居中。示例2:margin…

  • Lucene笔记15-Lucene的分词-通过TokenStream显示分词[通俗易懂]

    Lucene笔记15-Lucene的分词-通过TokenStream显示分词[通俗易懂]一、展示分词内容packagecom.wsy;importorg.apache.lucene.analysis.*;importorg.apache.lucene.analysis.standard.StandardAnalyzer;importorg.apache.lucene.analysis.tokenattributes.CharTermAttribute;impo…

  • 计算机网络ip地址划分范围,ip地址分类及范围划分有哪些

    计算机网络ip地址划分范围,ip地址分类及范围划分有哪些ip地址分为网络地址和主机地址,IP地址是真正网络中计算机的身份标识。手机的IP是手机上网使用的地址,不论是手机还是电脑,一个网段里面只有一个IP,所以每个人手机的IP都是唯一的,当用手机发朋友圈时,就会显示手机ip地址所在地,因此有些人会想要修改手机ip地址。那么ip地址可分为哪几类?其范围是怎么划分的?如何修改手机ip地址?下面小编为大家解答手机ip地址修改方法及ip地址分类及范围划分等知识。…

  • phpstorm激活码2021年4月_通用破解码

    phpstorm激活码2021年4月_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • JQuery EasyUI window 用法

    JQuery EasyUI window 用法JQuery代码 var$win;$win=$(‘#test-window’).window({title:’添加课程设置信息’,width:820,height:450,top:($(window).height()-820)*0.5,left:($(window).width()-450)*0.5,…

  • python面试常见问题有哪些「建议收藏」

    python面试常见问题有哪些「建议收藏」python面试常见问题有:1、Python是如何被解释的;2、什么是PEP8;3、Python是怎样管理内存的;4、什么是Python装饰器;5、Python提供哪些内置类型等等。

发表回复

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

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