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

前言

概述

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

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 命令时间复杂度

老规矩,放个图不过分吧
【Java】「进击Redis」五、Redis Hash运用场景、API解析

3 应用场景

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

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

以上是 【Java】「进击Redis」五、Redis Hash运用场景、API解析 的全部内容, 来源链接: utcz.com/a/90804.html

回到顶部