【Redis】hash 类型的介绍和常用命令

1. 介绍

Redis 中存储的 key-value 本身就是哈希表的结构,存储的 value 也可以是一个哈希表的结构

这里每一个 key 对应的一个 哈希类型用 field-value 来表示

2. 常用命令

|---------------------------------------|-----------------------------------------------|---------------|
| 命令 | 介绍 | 时间复杂度 |
| hset key field value | 用于设置哈希表 key 中字段 field 的值为 value | O (1) |
| hget key field | 获取哈希表 key 中字段 field 的值 | O (1) |
| hdel key field [field ...] | 删除哈希表 key 中的一个或多个字段 | O (k),k 是字段个数 |
| hlen key | 计算哈希表 key 中字段的个数 | O (1) |
| hgetall key | 获取哈希表 key 中所有的字段和值 | O (k),k 是字段个数 |
| hmget field [field ...] | 批量获取哈希表 key 中多个字段的值 | O (k),k 是字段个数 |
| hmset field value [field value ...] | 批量设置哈希表 key 中多个字段的值 | O (k),k 是字段个数 |
| hexists key field | 判断哈希表 key 中字段 field 是否存在 | O (1) |
| hkeys key | 获取哈希表 key 中所有的字段 | O (k),k 是字段个数 |
| hvals key | 获取哈希表 key 中所有的值 | O (k),k 是字段个数 |
| hsetnx key field value | 只有在哈希表 key 中的字段 field 不存在时,才设置其值为 value | O (1) |
| hincrby key field n | 将哈希表 key 中字段 field 的值增加 n | O (1) |
| hincrbyfloat key field n | 将哈希表 key 中字段 field 的值增加浮点数 n | O (1) |
| hstrlen key field | 计算哈希表 key 中字段 field 值的字符串长度 | O (1) |

3. 内部编码

hashtable:最基本的 hash 表

ziplist:如果 hash 表中的元素比较少并且 value 的长度比较短的时候会优化为 ziplist,节省内存

压缩的本质是针对数据进行重新编码,编码之后就能缩小体积,ziplist 付出的代价是进行读写元素时速度较慢,但是如果元素个数较少,影响不大,如果元素个数多了,就会影响效率,所以当哈希表中的元素较少,并且每一个 value 的值的长度都比较短时,使用 ziplist 表示,如果某个 value 长度过长也会转化为 hashtable

4. 应用场景

hash 类型也可以作为缓存来使用,可以用来存储用户信息

通过 hash 表的方式来存储,相比于 String 来存储 JSON 更加简单直观,灵活,JSON 和对象的相互转化需要用到序列化和反序列化,需要一定的开销,不过 hash 的方式存储也设计到 ziplist 到 hashtable 的编码的转换,可能造成内存的较大消耗

相关推荐
计算机毕设定制辅导-无忧学长6 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
KK溜了溜了7 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
程序员柳7 小时前
基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
数据库·微信小程序·layui
梦在深巷、7 小时前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb
IT乌鸦坐飞机8 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
IT_10248 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
祁思妙想9 小时前
八股学习(三)---MySQL
数据库·学习·mysql
惊骇世俗王某人9 小时前
1.MySQL之如何定位慢查询
数据库·mysql
秦歌66610 小时前
向量数据库-Milvus快速入门
数据库·milvus
苦夏木禾10 小时前
js请求避免缓存的三种方式
开发语言·javascript·缓存