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数据结构和列表数据结构,是比较常用且重要的数据结构,以及篇幅所限,后面会有专门的篇幅研究这两种数据结构的应用场景,小伙伴们敬请期待。
相关推荐
5. 数据结构操作:Redis支持多种数据结构操作,包括字符串、列表、集合、有序集合和哈希表。在插入信息和获取信息的示例中,演示了如何使用列表数据结构存储和读取数据。 6. 数据持久化:Redis支持RDB和AOF两种持久...
Redis作为一个高性能的键值存储系统,其丰富的数据结构(如字符串、哈希、列表、集合、有序集合等)为开发者提供了极大的灵活性。与关系型数据库不同,Redis允许开发者直接操作数据结构,从而在设计键值时需要更深入...
Redis,作为一个高性能的键值存储系统,因其丰富的数据结构和高效的内存操作,常被用于实现分布式环境下的协调任务。本文将深入探讨Redis如何在分布式系统中发挥协调作用,尤其是在进程调度、线程管理和消息队列中的...
#### 三、Redis迭代演化和Redis7新特性浅谈 - **时间推移与版本升级**: - 官方博客: - 版本迭代历程中的一些重要里程碑。 - **Redis7.0新特性**: - **Redis Functions**: 提供函数调用的能力,扩展Redis的功能...
它支持多种数据结构,如字符串、哈希、列表、集合等,适用于不同的应用场景。分布式缓存的主要配置方式有主从模式、哨兵模式和集束模式。 主从模式允许数据有备份,可通过从节点查询操作来完成,提供数据的高可用性...
Redis支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。由于数据存储在内存中,因此Redis具有非常高的读写速度。此外,Redis还支持数据持久化功能,可以通过定期快照或追加日志的方式将数据保存到磁盘...
在MySQL中,索引是一种特殊的数据结构,用于加速数据检索。当正确地设计和使用时,索引能够显著提高查询速度,尤其是在处理大量数据时。 首先,我们需要理解为什么SQL查询可能会变慢。这通常与查询语句的编写方式、...