编程知识 cdmana.com

「进击Redis」五、Redis Hash运用场景、API解析

前言

Redis 有五种基础数据结构,本来想把这些数据结构的运用场景和 API 的解析放在一篇,但是我弄完上一篇 Redis 字符串 API、运用场景解析,我又放弃了这个想法。是的,我会把他们拆开。一方面方便后面去改动,篇幅也不会那么长,另一方面拆分出来看也是很方便的,是吧,好哥哥们。看我这么贴心还不点赞加关注吗。
感动

概述

Hash 表我想好哥哥们很熟悉吧,像 JAVA 中的 HashMap(我只会 JAVA)。每个人对 Hash 的叫法可能也不一样,可能是哈希、字典、关联数组等等。
在 Redis 中,Hash 类型是指键对应值本身又是一个键值对结构,类似 value={{field,value}。如图
Hash

1 常用命令

1.1 设置值

 ## 格式
 hset key field value
 ## 为用户1添加一对field-value,成功返回1,反之就是0
 hset user:1 name test

1.2 设置值-hsetnx

 ## 格式,这个命令跟String的set、setnx逻辑是一样的,但是其作用域由键变为field,不懂的可以看下上一篇
 hsetnx key_name field value
 ## 再次执行下面这个命令会不成功,因为name 已经存在了
 hsetnx user:1 name test

1.3 获取值

 ## 格式,需要同时制定key和field
 hget key field
 ## 获取user:1key下面的name
 hget user:1 name

1.4 删除 field

 ## 格式,可以删除多个field
 hdel key field [field ...]
 ## 删除user:1下面name和age
 hdel user:1 name age

1.5 统计 field 的个数

 ## 格式
 hlen key
 ## 统计user:1field的个数
 hlen user:1

1.6 批量设值/获取 field-value

 ## 格式
 hmget key field [field ...]
 hmset key field value [field value ...]
 ## 获取user:1下的name和age
 hmget user:1 name age
 ## 批量设置user:1的field
 hmset user:1 name test2 age 12 city guangzhou

1.7 判断 field 是否存在

 ## 格式
 hexists key field
 ## 判断user:1下的name是否存在,存在返回1,否则0
 hexists user:1 name

1.8 获取所有 field

 ## 格式,怎么不叫hfields,Antirez 你误导我
 hkeys key
 ## 返回user:1 下所有的field
 hkeys user:1

1.9 获取所有 value

 ## 格式
 hvals key
 ## 返回user:1 下所有的value
 hvals user:1

1.10 获取所有的 field-value

 ## 格式 尽量不要用这个,如果是一个大key的话,field很多,可能会让Redis阻塞很久
 hgetall key
 ## 返回user:1 下所有的fiele和value
 hgetall user:1

2 命令时间复杂度

老规矩,放个图不过分吧
在这里插入图片描述

3 应用场景

实际上 Hash 存的本质上来说还是 String,我们可以把我们的实体对象转换成 JSON 字符串然后存进去,当然也可以按字段对应存入 Hash,两张模式都是 OK 的。主要我们可以根据实际情况考虑,如果说我们的实体字段太多的话就不建议存 Hash 了。当我们的实体有某个字段需要频繁修改时就不建议存 String,因为只是改了其中的某一个字段,明显存 Hash 更合理一些。比如像购物车这种,可以用用户 id 为 key,商品 id 为 field,商品数量为 value,一个用户购物车又会有多条记录。
总的来说一般对象用 string + json 存储,对象中某些频繁变化的属性抽出来用 hash 存储,好哥哥们根据实际的场景看着使用吧。
另外一方面的话就是存储对象。和关系型的数据库存储对比,正常像 mysql 这种是按行显示的,而 Hash 的话则以单个对象来显示的,见下图。
对比

本期就到这啦,有不对的地方欢迎好哥哥们评论区留言,另外$\color{#FF0000}{求关注、求点赞}$

下一篇:Redis List 运用场景、API 解析
上一篇:Reids 字符串 API、运用场景解析

版权声明
本文为[ ]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000038629747

Scroll to Top