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持久化策略与RDB Redis持久化策略与AOF Redis主从复制与集群配置 Redis事务与Lua脚本 Redis性能优化与监控 Redis内存管理与优化 Redis高可用与故障转移 Redis...
Redis是一款开源的、高性能的...Redis的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和 有序集合(sorted sets)等数据类型。 对于这些数据类型,你可以执行原子操作
Redis是一款高性能的键值存储系统,它以其丰富的数据结构、高效的数据操作以及强大的持久化机制在现代互联网架构中扮演着重要角色。本篇文章主要探讨Redis的核心数据结构和核心原理,以及如何利用IO多路复用技术处理...
【小林的图解系列之一,图解Redis数据结构】 Redis是一种高性能的内存数据库,其速度之快得益于其数据结构的高效实现。Redis中的数据结构并非仅限于基础的String、List、Hash、Set和Zset等数据类型,而是指它们在...
7. Redis 对象和数据结构:Redis 提供的列表、哈希、集合和有序集合等对象,根据数据规模和特性,可能使用不同的底层实现,如ziplist适用于小数据量场景,而大列表可能使用链表或跳跃表,哈希可能用字典,有序集合...
自己整理的redis自定义的数据结构,对理解redis运行的内部原理会有所帮助
在Redis中,数据结构不仅仅是简单的字符串、整数或哈希,还包括了集合、有序集合、链表、位图等多种类型。这些数据结构的高效实现是Redis能够处理大量并发请求的关键。下面将详细阐述Redis中的主要数据结构及其应用...
Redis支持多种数据类型,本篇文章将对Redis的基础数据结构进行讲解,包括string(字符串)、list(列表)、set(集合)、hash(哈希)以及zset(有序集合)。掌握这些基础数据结构对使用Redis至关重要。 首先,字符...
Redis 数据结构详解 Redis 不仅仅是一个简单的键值数据库,它是一个强大的数据结构服务器,提供了多种类型的数据结构,使得数据处理更为灵活。以下是 Redis 支持的主要数据结构: 1. **二进制安全字符串**:Redis ...
Redis的这些数据结构设计考虑了内存效率、查询速度和数据操作的便利性。压缩列表和散列表等自定义数据结构是Redis能够高效运作的关键。在实际应用中,Redis广泛用于缓存、消息队列、计数器等多种场景,其高性能和...
以下是对Redis数据结构的详细介绍: 1. 字符串(String) 字符串是最基础的数据类型,可以存储任意二进制数据,最长可达1GB。你可以通过`SET`命令设置键值,`GET`命令获取键值。此外,Redis还提供了原子递增`INCR`、...
【描述】"火山视窗redis数据库存取哈希表例程" 暗示了这个压缩包包含了一组程序或代码,演示了如何在火山视窗环境下与Redis数据库进行通信,并且具体操作的是哈希表这种数据结构。这可能包括了创建哈希、设置和获取...
其数据结构丰富,支持字符串、哈希、列表、集合和有序集合等多种类型,使得Redis在处理各种复杂数据操作时表现出色。 1. **Redis的启动过程** Redis的启动主要包括以下步骤: - 首先,检查配置文件(默认为`redis...
在面试中,Redis的数据结构是考察候选人技术深度的重要部分。以下将详细介绍Redis中的主要数据结构及其应用。 1. 字符串(String) Redis中的字符串是最基本的数据类型,可以存储任何可打印的字符序列,包括整数和...
Redis从入门到精通高清,迅雷播放器组件可顺利播放
Redis的数据类型包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets),这些数据结构使得Redis能够处理多种多样的应用场景。例如: 1. 字符串:最基础的数据类型,可以...
Redis 数据结构 – 哈希 哈希是 Redis 中的一种复杂的数据类型,哈希的值可以是多个键值对,哈希可以用来实现对象存储。 Redis 持久化 Redis 提供了两种持久化方式:RDB 和 AOF。 Redis 持久化 – RDB RDB(Redis ...
在本资料"05-Redis 核心数据结构 & Redis 6 新特性详解-郭嘉.zip"中,我们将深入探讨Redis的核心数据结构以及最新的Redis 6版本的新特性。 一、Redis核心数据结构 1. 字符串(String):Redis最基础的数据类型,可...