`

浅谈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在项目中的应用

    5. 数据结构操作:Redis支持多种数据结构操作,包括字符串、列表、集合、有序集合和哈希表。在插入信息和获取信息的示例中,演示了如何使用列表数据结构存储和读取数据。 6. 数据持久化:Redis支持RDB和AOF两种持久...

    浅谈Redis数据库的键值设计

    Redis作为一个高性能的键值存储系统,其丰富的数据结构(如字符串、哈希、列表、集合、有序集合等)为开发者提供了极大的灵活性。与关系型数据库不同,Redis允许开发者直接操作数据结构,从而在设计键值时需要更深入...

    浅谈Redis在分布式系统中的协调性运用

    Redis,作为一个高性能的键值存储系统,因其丰富的数据结构和高效的内存操作,常被用于实现分布式环境下的协调任务。本文将深入探讨Redis如何在分布式系统中发挥协调作用,尤其是在进程调度、线程管理和消息队列中的...

    Redis基础笔记总结

    #### 三、Redis迭代演化和Redis7新特性浅谈 - **时间推移与版本升级**: - 官方博客: - 版本迭代历程中的一些重要里程碑。 - **Redis7.0新特性**: - **Redis Functions**: 提供函数调用的能力,扩展Redis的功能...

    浅谈电商支撑系统中分布式缓存管理技术的研究与实现.pdf

    它支持多种数据结构,如字符串、哈希、列表、集合等,适用于不同的应用场景。分布式缓存的主要配置方式有主从模式、哨兵模式和集束模式。 主从模式允许数据有备份,可通过从节点查询操作来完成,提供数据的高可用性...

    nosql数据库的应用探讨

    Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。由于数据存储在内存中,因此Redis具有非常高的读写速度。此外,Redis还支持数据持久化功能,可以通过定期快照或追加日志的方式将数据保存到磁盘...

    浅谈MySQL索引优化分析

    在MySQL中,索引是一种特殊的数据结构,用于加速数据检索。当正确地设计和使用时,索引能够显著提高查询速度,尤其是在处理大量数据时。 首先,我们需要理解为什么SQL查询可能会变慢。这通常与查询语句的编写方式、...

Global site tag (gtag.js) - Google Analytics