`

浅谈redis数据结构之哈希

阅读更多

1. 哈希

       哈希(hash)类型是一种比较常用的数据类型,绝大多数的编程语言都提供了hash类型,它们的叫法可能是哈希、字典、关联数组。在redis中,哈希类型是指键(K)值本身又是一个键值对结构。

       哈希的形式类似于这样:value={{field1,value1},...{fieldN,valueN}},redis键值对和哈希类型两者的关系如下图所示:

 

        这里有个概念需要说明下,哈希类型中的映射关系叫作field-value,这里的value是指field对应的值,不是键(K)对应的值。

 

2. 操作命令

2.1 基本命令

       由于篇幅所限,这里就简单的做个演示,如下图所示:

 

 

 

       这里hgetall命令需要注意一下:在使用 hgetall 时,如果哈希元素个数比较多,会存在阻塞Redis的可能。如果开发人员只需要获取部分field,可以使用hmget,如果一定要获取全部 field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型。操作命令如下图所示:

 

2.2 不常用命令

       这里也是因为篇幅所限,就简单的做个演示,如下图所示:

从图上看,hstrlen key field报错了,这个命令是有redis版本限制的,版本号必须不能低于3.2.0。

 

2.3 哈希类型命令的时间复杂度

       下面是我这边整理的关于哈希类型命令的时间复杂度,如下表所示:

命令 时间复杂度
hset key field value O(1)
hget key field O(1)
hdel key field [field .....] O(k),k是field个数
hlen key O(1)
hgetall key O(n),n是field个数
hmget field [field ...] O(k),k是field个数
hmset field value [field value ...] O(k),k是field个数
hexists key field O(1)
hkeys key O(n),n是field个数
hvals value O(n),n是field个数
hsetnx key field value O(1)
hincrby key field increment O(1)
hincrbyfloat key field increment O(1)
hstrlen key field O(1)

 

3. 内部编码

       哈希类型的内部编码有两种:压缩列表(ziplist),哈希表(hashtable)。

3.1 ziplist

       当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)、同时所有值都小于hash-max-ziplist-value配置(默认64字节)时,Redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable更加优秀。

 

3.2 hashtable

       当哈希类型无法满足ziplist的条件时,Redis会使用hashtable作为哈希的内部实现,因为此时ziplist的读写效率会下降,而hashtable的读写时间复杂度为 O(1)。

       下面的示例演示了哈希类型的内部编码,以及相应的变化。当field个数 比较少,且没有大的value时,内部编码为ziplist:

 

4. 应用场景

       因为redis的hash数据结构和列表数据结构,是比较常用且重要的数据结构,以及篇幅所限,后面会有专门的篇幅研究这两种数据结构的应用场景,小伙伴们敬请期待。

分享到:
评论

相关推荐

    redis数据结构服务器

    Redis是一款开源的、高性能的...Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原子操作

    go&redis数据结构的底层实现.docx

    go&redis数据结构的底层实现.docx

    Redis数据结构.pptx

    针对Redis的高级数据结构PPT。该PPT一共14页,介绍了Zset的数据结构类型,以及跳表的数据结构。简单阐述了BitMap,HLL,Bloom Filter的原理以及一些常用的指令。针对Bloom Filter有一些自己的见解以及分析

    redis数据结构

    自己整理的redis自定义的数据结构,对理解redis运行的内部原理会有所帮助

    Redis数据结构与对象总结

    Redis数据结构与对象总结 数据结构与对象 简单动态字符串 SDS简介 SDS与C字符串的区别 常数复杂度获取字符串长度 O(n) O(1) 杜绝缓冲区溢出 修改字符串长度时内存重分配 空间预分配:对字符串进行增长操作时...

    01-Redis核心数据结构实战与高性能原理剖析-ev.rar

    01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心数据结构实战与高性能原理剖析_ev.rar01-Redis核心...

    01-VIP-Redis核心数据结构与核心原理1

    Nginx也是采用IO多路复用原理解决C10K问题# 查看redis支持的最大连接数,在redis.conf文件中可修改,# maxclients 10000其

    redis数据结构.pdf

    Redis数据结构和操作 redis不只是一个简单的键(key)-值(value)数据库,实际上它是一个数 据结构服务器,支持各种类型的值。也就是说,在传统的键-值数据库 中,你把字符串键与字符串值联系起来,而在redis,值不仅...

    数据结构Redis中数据类型对应的数据结构.pdf

    数据结构 数据结构Redis中数据类型对应的数据结构 中数据类型对应的数据结构 Redis Redis 是⼀种键值(Key-Value)数据库。相对于关系型数据库(⽐如 MySQL),Redis 也被叫作⾮关系型数据库。 像 MySQL 这样的关系...

    十五分钟介绍-Redis数据结构.pdf

    十五分钟介绍-Redis数据结构

    3.Redis数据类型之List类型

    3.Redis数据类型之List类型

    Redis入门教程.docx

    12.redis数据结构 – 哈希 13.聊聊redis持久化 – 两种方式 14.聊聊redis持久化 – RDB 15.聊聊redis持久化 – AOF 16.聊聊redis持久化 – AOF重写 17.聊聊redis持久化 – 如何选择RDB和AOF 18.聊聊主从 – 用法 19....

    Redis基础数据结构.pptx

    详细分析redis设计及实现原理 详细分析redis设计及实现原理

    Redis 数据结构1

    Redis
底层网络模型为单线程+epoll,也就是说,发送至
Redis
的命令是执的若采用直接扩容的方式,那么当遇到巨大的哈希表时,数据的复制将花费很长时间

    详解redis数据结构之sds

    详解redis数据结构之sds  字符串在redis中使用非常广泛,在redis中,所有的数据都保存在字典(Map)中,而字典的键就是字符串类型,并且对于很大一部分字典值数据也是又字符串组成的。以下是sds的具体存储结构: ...

    redis数据结构基础知识及案列(每个数据结构一个案例).zip

    redis数据结构基础知识及案列(每个数据结构一个案例)

    redis2json:以JSON格式导出Redis数据

    例如: ./redis_to_json.py | gzip > redis_backup.json.gz这对于您正在使用但又不想丢失数据的应用程序也很不错,因为Redis RDB文件并不总是那么方便。注意事项和注意事项u()中的Unicode支持仅适用于Python2.x。...

    详解redis数据结构之压缩列表

    详解redis数据结构之压缩列表 redis使用压缩列表作为列表键和哈希键的底层实现之一。当一个列表键只包含少量的列表项,并且每个列表项都是由小整数值或者是短字符串组成,那么redis就会使用压缩列表存储列表项;同理...

    Redis从入门到精通(深入剖析)【55集完整资料】29-redis-redis中关于哈希类型数据的操作命令2.avi

    Redis从入门到精通高清,迅雷播放器组件可顺利播放

Global site tag (gtag.js) - Google Analytics