【Redis】hash数据类型相关指令

目录

hset

设置 hash 中指定的字段(field)的值(value)。

由于Redis本身就是哈希的形式,它自身的键值对称为 key - value,而对于哈希数据类型,也就是 key - value 的 value 是哈希,那么这时称其为 field - value,为了区分开。那么 hset 对于 key 不存在的场景,会自动创建,如果存在,就会向其中添加 field - value,如果 field 存在,就会进行覆盖,该指令返回新增到哈希表中字段的数量。注意这里的hash的 field - value 都只能是字符串,不能像 Redis 的顶层哈希一样能存各种数据结构,可能本身出于轻量化的考虑吧。

hget

获取 hash 中指定字段的值。

key 或 field 不存在就返回 nil。

hexists

判断 hash 中是否有指定的字段。

和 hget 一样,key 或 field 不存在就返回 0。存在就返回 1。和 hget 想必就是不能在存在时获取到 value。

hdel

删除 hash 中指定的字段。

删除的是 field,del 删除的是 key。返回值是本轮操作删除的字段数量。

hkeys

获取 hash 中的所有字段。

hvals

获取 hash 中的所有的值。

hgetall

获取 hash 中的所有字段以及对应的值。

这个指令就是上面两个的合体。这几个指令都不建议冒然使用,原因和 keys *一样,因为都是O(N),如果数据量过大会阻塞线程。

hmget

一次获取 hash 中多个字段的值.

该指令的 O(N) 是将查询的 field 视为 N。

对应的 field 不存在,那么就会返回 nil,如果 key 不存在,那么有几个 field 就返回几个 nil。有 hmget,那么有没有 hmset 呢?其实是有的,但是 hset 本身就能设置多个,所以功能重合了。

hlen

获取 hash 中的所有字段的个数。

key 不存在返回 0。

hsetnx

在字段不存在的情况下,设置 hash 中的字段和值。

如果是存在的 field,那么什么都不会做,如果不存在才会设置。

hincrby

将 hash 中字段对应的数值添加指定的值。

注意 value 得是整形,然后小数的计算也是不行的。这里因为计算这块用的少,也没有提供诸如 hdecrby 的指令,但是我们可以通过加上负数的方式实现减法。

hincrbyfloat

hincrby 的浮点数版本。

hstrlen

返回指定 field 的 value 的长度。

内部编码

ziplist(压缩列表):当哈希类型元素个数小于 hash-max-ziplist-entries 配置(默认 512 个)、同时所有值都小于 hash-max-ziplist-value 配置(默认 64 字节)时,Redis 会使用 ziplist 作为哈希的内部实现,ziplist 使用更加紧凑的结构实现多个元素的连续存储,所以在节省内存方面比hashtable 更加优秀。ziplist 的查询效率低于普通哈希,但是因为其只在元素少的情况下使用,所以无伤大雅。

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

使用场景

Redis 哈希类型最核心的使用场景之一是结构化数据的缓存(如用户信息、商品信息等业务实体数据)。相比于将每个属性拆分为独立字符串键(内存占用高、数据分散),或把整个对象序列化为单个 JSON 字符串(局部更新不灵活、有序列化开销),哈希类型能以 "键(实体 ID)- 字段(属性名)- 值(属性值)" 的形式,直观且高效地缓存结构化数据,既保持了数据的内聚性,又支持对单个属性的精准读写(如仅更新用户年龄、仅获取商品价格),是缓存这类实体数据的最优选择。同时需注意,哈希类型是稀疏结构(不同键可拥有不同字段),更适配灵活的属性存储场景,但无法替代关系型数据库完成复杂的关联查询,仅适用于单实体的属性缓存与操作。

相关推荐
广州灵眸科技有限公司2 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手4 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学5 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
二宝哥5 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
oradh7 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z123456789868 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD8 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo8 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward9 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记9 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘