`

浅谈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字符串与列表数据结构 Redis哈希与集合数据结构

    Redis哈希与集合数据结构 Redis排序集合与使用场景 Redis持久化策略与RDB Redis持久化策略与AOF Redis主从复制与集群配置 Redis事务与Lua脚本 Redis性能优化与监控 Redis内存管理与优化 Redis高可用与故障转移 Redis...

    redis数据结构服务器

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

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

    Redis是一款高性能的键值存储系统,它以其丰富的数据结构、高效的数据操作以及强大的持久化机制在现代互联网架构中扮演着重要角色。本篇文章主要探讨Redis的核心数据结构和核心原理,以及如何利用IO多路复用技术处理...

    小林的图解系列之一,图解redis数据结构

    【小林的图解系列之一,图解Redis数据结构】 Redis是一种高性能的内存数据库,其速度之快得益于其数据结构的高效实现。Redis中的数据结构并非仅限于基础的String、List、Hash、Set和Zset等数据类型,而是指它们在...

    Redis 数据结构1

    7. Redis 对象和数据结构:Redis 提供的列表、哈希、集合和有序集合等对象,根据数据规模和特性,可能使用不同的底层实现,如ziplist适用于小数据量场景,而大列表可能使用链表或跳跃表,哈希可能用字典,有序集合...

    redis数据结构

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

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

    在Redis中,数据结构不仅仅是简单的字符串、整数或哈希,还包括了集合、有序集合、链表、位图等多种类型。这些数据结构的高效实现是Redis能够处理大量并发请求的关键。下面将详细阐述Redis中的主要数据结构及其应用...

    redis基础数据结构讲解

    Redis支持多种数据类型,本篇文章将对Redis的基础数据结构进行讲解,包括string(字符串)、list(列表)、set(集合)、hash(哈希)以及zset(有序集合)。掌握这些基础数据结构对使用Redis至关重要。 首先,字符...

    redis数据结构.pdf

    Redis 数据结构详解 Redis 不仅仅是一个简单的键值数据库,它是一个强大的数据结构服务器,提供了多种类型的数据结构,使得数据处理更为灵活。以下是 Redis 支持的主要数据结构: 1. **二进制安全字符串**:Redis ...

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

    Redis的这些数据结构设计考虑了内存效率、查询速度和数据操作的便利性。压缩列表和散列表等自定义数据结构是Redis能够高效运作的关键。在实际应用中,Redis广泛用于缓存、消息队列、计数器等多种场景,其高性能和...

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

    以下是对Redis数据结构的详细介绍: 1. 字符串(String) 字符串是最基础的数据类型,可以存储任意二进制数据,最长可达1GB。你可以通过`SET`命令设置键值,`GET`命令获取键值。此外,Redis还提供了原子递增`INCR`、...

    火山视窗redis数据库存取哈希表例程.zip

    【描述】"火山视窗redis数据库存取哈希表例程" 暗示了这个压缩包包含了一组程序或代码,演示了如何在火山视窗环境下与Redis数据库进行通信,并且具体操作的是哈希表这种数据结构。这可能包括了创建哈希、设置和获取...

    Redis启动,数据结构存储系统

    其数据结构丰富,支持字符串、哈希、列表、集合和有序集合等多种类型,使得Redis在处理各种复杂数据操作时表现出色。 1. **Redis的启动过程** Redis的启动主要包括以下步骤: - 首先,检查配置文件(默认为`redis...

    redis面试题之数据结构.zip

    在面试中,Redis的数据结构是考察候选人技术深度的重要部分。以下将详细介绍Redis中的主要数据结构及其应用。 1. 字符串(String) Redis中的字符串是最基本的数据类型,可以存储任何可打印的字符序列,包括整数和...

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

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

    Redis 数据库

    Redis的数据类型包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets),这些数据结构使得Redis能够处理多种多样的应用场景。例如: 1. 字符串:最基础的数据类型,可以...

    超详细Redis数据库入门教程.docx

    Redis 数据结构 – 哈希 哈希是 Redis 中的一种复杂的数据类型,哈希的值可以是多个键值对,哈希可以用来实现对象存储。 Redis 持久化 Redis 提供了两种持久化方式:RDB 和 AOF。 Redis 持久化 – RDB RDB(Redis ...

    05-Redis 核心数据结构 & Redis 6 新特性详解-郭嘉.zip

    在本资料"05-Redis 核心数据结构 & Redis 6 新特性详解-郭嘉.zip"中,我们将深入探讨Redis的核心数据结构以及最新的Redis 6版本的新特性。 一、Redis核心数据结构 1. 字符串(String):Redis最基础的数据类型,可...

Global site tag (gtag.js) - Google Analytics