Redis 数据类型hash(哈希)

目录

[1 基本特性](#1 基本特性)

[2 主要操作命令](#2 主要操作命令)

[2.1 设置和获取字段](#2.1 设置和获取字段)

[2.1.1 HSET key field value](#2.1.1 HSET key field value)

[2.1.2 HGET key field](#2.1.2 HGET key field)

[2.1.3 HMSET key field1 value1 field2 value2 ...](#2.1.3 HMSET key field1 value1 [field2 value2 ...])

[2.1.4 HMGET key field1 field2 ...](#2.1.4 HMGET key field1 [field2 ...])

[2.2 检查字段是否存在](#2.2 检查字段是否存在)

[2.2.1 HEXISTS key field](#2.2.1 HEXISTS key field)

[2.3 获取所有字段和值](#2.3 获取所有字段和值)

[2.3.1 HGETALL key](#2.3.1 HGETALL key)

[2.3.2 HKEYS key](#2.3.2 HKEYS key)

[2.3.3 HVALS key](#2.3.3 HVALS key)

[2.4 删除字段](#2.4 删除字段)

[2.4.1 HDEL key field1 field2 ...](#2.4.1 HDEL key field1 [field2 ...])

[2.5 计算字段数量](#2.5 计算字段数量)

[2.5.1 HLEN key](#2.5.1 HLEN key)

[2.6 递增/递减字段值](#2.6 递增/递减字段值)

[2.6.1 HINCRBY key field increment](#2.6.1 HINCRBY key field increment)

[2.6.2 HINCRBYFLOAT key field increment](#2.6.2 HINCRBYFLOAT key field increment)


哈希在 Redis 中是一个键值对集合,适合存储对象。每个哈希可以存储多个字段-值(field-value)对。哈希非常适合存储那些具有多个属性的对象,比如用户信息等。

1 基本特性

  • 键值对集合:哈希是一个键值对的集合,其中每个键关联一个字符串值。这使得哈希可以用来表示复杂的对象,例如包含多个属性的用户记录。

  • 内存效率:哈希在内部使用一种紧凑的表示方式来存储数据,这对于存储大量小对象来说非常高效。当哈希中字段较少时,Redis 使用ziplist编码以节省空间;当字段数量或值大小超过一定阈值时,则转换为hashtable编码。

  • 原子操作:对于单个哈希表的所有命令都是原子性的,这意味着即使有多个客户端同时访问同一个哈希表,它们的操作也不会互相干扰。

  • 部分更新:你可以单独更新哈希中的任何一个字段,而不需要重新写入整个哈希。

  • 性能:哈希的字段读写非常高效,特别是当字段数量较少时。

2 主要操作命令

2.1 设置和获取字段
2.1.1 HSET key field value

将哈希表 key 中的字段 field 的值设为 value

复制代码
127.0.0.1:6379> HSET user:1 name "Alice" age 25
(integer) 2
2.1.2 HGET key field

获取哈希表 key 中字段 field 的值。

复制代码
127.0.0.1:6379> hget user:1 name
"Alice"
2.1.3 HMSET key field1 value1 field2 value2 ...

同时设置多个字段值(从 Redis 4.0 开始推荐使用 HSET 的多参数形式)。

复制代码
127.0.0.1:6379> hmset user:2 name "jack" age 29
OK
2.1.4 HMGET key field1 field2 ...

同时获取多个字段的值。

复制代码
127.0.0.1:6379> hmget user:2 name age
1) "jack"
2) "29"
2.2 检查字段是否存在
2.2.1 HEXISTS key field

检查哈希表 key 中是否存在字段 field。存在field属性返回1,不存在返回0。

复制代码
127.0.0.1:6379> hexists user:2 name
(integer) 1
127.0.0.1:6379> hexists user:2 email
(integer) 0
2.3 获取所有字段和值
2.3.1 HGETALL key

获取哈希表 key 中所有的字段和值。

复制代码
127.0.0.1:6379> hgetall user:2
1) "name"
2) "jack"
3) "age"
4) "29"
2.3.2 HKEYS key

获取哈希表 key 中的所有字段名。

复制代码
127.0.0.1:6379> hkeys user:2
1) "name"
2) "age"
2.3.3 HVALS key

获取哈希表 key 中的所有字段值。

复制代码
127.0.0.1:6379> hvals user:2
1) "jack"
2) "29"
2.4 删除字段
2.4.1 HDEL key field1 field2 ...

删除哈希表 key 中的一个或多个字段。

复制代码
127.0.0.1:6379> hdel user:2 age
(integer) 1
127.0.0.1:6379> hkeys user:2
1) "name"
2.5 计算字段数量
2.5.1 HLEN key

返回哈希表 key 中字段的数量。

复制代码
127.0.0.1:6379> hlen user:2
(integer) 1
2.6 递增/递减字段值
2.6.1 HINCRBY key field increment

将哈希表 key 中的字段 field 的整数值增加指定的增量。

XML 复制代码
127.0.0.1:6379> hgetall user:1
1) "name"
2) "Alice"
3) "age"
4) "25"
127.0.0.1:6379> hincrby user:1 age 4
(integer) 29
127.0.0.1:6379> hget user:1 age
"29"
2.6.2 HINCRBYFLOAT key field increment

将哈希表 key 中的字段 field 的浮点数值增加指定的增量。

XML 复制代码
127.0.0.1:6379> hincrbyfloat user:1 age 0.50
"29.5"

更多命令请参考:Commands | Docs

相关推荐
2601_963771374 小时前
Speeding Up Creative Agency Portfolios: A Performance Guide
前端·数据库·php
Quincy_Freak6 小时前
银河麒麟 SQLite 实操:Excel 导入与 SQL 语法编辑功能详解摘要
数据库·arm·数据库管理·大数据分析·银河麒麟·aarch64·sqlitego
七夜zippoe6 小时前
OpenClaw 数据加密:敏感信息保护的完整方案
数据库·mysql·php·openclaw·敏感保护
Dovis(誓平步青云)6 小时前
《C/C+++ Boost 轻量级搜索引擎实战:架构流程、技术栈与工程落地指南——HTML文件的清洗(上篇)》
开发语言·数据库·c++·搜索引擎·开源
蚁库8 小时前
Oracle 12c + ASM + UDEV 实战教程:从磁盘规划到日常管理,10节视频完整通关
数据库·oracle
云和恩墨17 小时前
数据库一体机简史:从ODA到zData X,命名之中的玄机
数据库·vr
数据库小学妹18 小时前
KES是什么?国产数据库技术架构、核心能力与选型实战解析
数据库·经验分享·架构·国产数据库·数据库选型·信创数据库
Database_Cool_18 小时前
向量检索加速首选:阿里云 Tair 内置向量能力毫秒级召回
数据库·阿里云
这不小天嘛19 小时前
JAVA八股——redis篇
java·开发语言·redis
强健的石头19 小时前
django文件对象是什么?
数据库·django·sqlite