java redis hash怎么用_【Java】「进击Redis」五、Redis Hash运用场景、API解析

前言

概述

Hash 表我想好哥哥们很熟悉吧,像 JAVA 中的 HashMap(我只会 JAVA)。每个人对 Hash 的叫法可能也不一样,可能是哈希、字典、关联数组等等。

在 Redis 中,Hash 类型是指键对应值本身又是一个键值对结构,类似 value={{field,value}。如图

8bb8080312ed8579b6cc02f3fde85851.png

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

老规矩,放个图不过分吧

b73b7e463c454b3bea33d814bcd17dd5.png

3 应用场景

实际上 Hash 存的本质上来说还是 String,我们可以把我们的实体对象转换成 JSON 字符串然后存进去,当然也可以按字段对应存入 Hash,两张模式都是 OK 的。主要我们可以根据实际情况考虑,如果说我们的实体字段太多的话就不建议存 Hash 了。当我们的实体有某个字段需要频繁修改时就不建议存 String,因为只是改了其中的某一个字段,明显存 Hash 更合理一些。比如像购物车这种,可以用用户 id 为 key,商品 id 为 field,商品数量为 value,一个用户购物车又会有多条记录。

总的来说一般对象用 string + json 存储,对象中某些频繁变化的属性抽出来用 hash 存储,好哥哥们根据实际的场景看着使用吧。

另外一方面的话就是存储对象。和关系型的数据库存储对比,正常像 mysql 这种是按行显示的,而 Hash 的话则以单个对象来显示的,见下图。

5d48d76d2c74cbe9df5d12a178150c76.png

下一篇:Redis List 运用场景、API 解析

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值