【Redis】Redis命令-Hash命令

一、介绍

之前我们一再强调,redis是键值型的数据库,它的值的类型多种多样,在string类型中,值就是普通字符串。

但在Hash类型(也叫散列),其value是一个无序字典(其实就是一个hash表),类似于Java中的HashMap结构。

也就是说redis本身是一个key-value,而哈希类型的value又是一个哈希表,即key-value结构。

由于String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便,要么删除整个字符串,要么删掉重来

1652941995945

而Hash结构的key跟string没什么差异,但是value又分成了两部分:field(也有人称为hashKey),value,此时我们就不需要再使用JSON字符串来表示一个用户了,它可以将对象中的每个字段独立存储,此时针对单个字段做CRUD,并不会影响到其他字段。

1652942027719

二、Hash类型的常见命令

这些命令可以对照着string类型进行学习,在它命令的基础上前面加上 H 就变成了Hash操作命令。

由于多了一个 field,因此增改查的时候都需要告明是哪个 key、哪个 field

image-20240523085240462
  • HSET key field value:添加或者修改hash类型key的field的值

  • HGET key field:获取一个hash类型key的field的值

  • HMSET:批量添加多个hash类型key的field的值

  • HMGET:批量获取多个hash类型key的field的值

  • HGETALL:获取一个hash类型的key中的所有的field和value

  • HKEYS:获取一个hash类型的key中的所有的field

  • HVALS:获取一个hash类型的key中的所有的value

  • HINCRBY:让一个hash类型key的字段值自增并指定步长

  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行


三、代码实现

HSET和HGET

存入到redis后,图形化界面如下,可以发现key里面存的value又是一个key-value结构,即hash结构

image-20240523085620048

127.0.0.1:6379> HSET heima:user:3 name Lucy # 大key是 heima:user:3 小key是name,小value是Lucy
(integer) 1
127.0.0.1:6379> HSET heima:user:3 age 21 # 如果操作不存在的数据,则是新增
(integer) 1
# 修改某一个字段的值
127.0.0.1:6379> HSET heima:user:3 age 17 # 如果操作存在的数据,则是修改
(integer) 0
127.0.0.1:6379> HGET heima:user:3 name 
"Lucy"
127.0.0.1:6379> HGET heima:user:3 age
"17"

HMSET和HMGET

127.0.0.1:6379> HMSET heima:user:4 name HanMeiMei
OK
127.0.0.1:6379> HMSET heima:user:4 name LiLei age 20 sex man # 存多组
OK
127.0.0.1:6379> HMGET heima:user:4 name age sex # 查多组
1) "LiLei"
2) "20"
3) "man"

HGETALL

127.0.0.1:6379> HGETALL heima:user:4
# 返回格式是:一个key一个value
1) "name"
2) "LiLei"
3) "age"
4) "20"
5) "sex"
6) "man"

HKEYS和HVALS

127.0.0.1:6379> HKEYS heima:user:4
1) "name"
2) "age"
3) "sex"
127.0.0.1:6379> HVALS heima:user:4
1) "LiLei"
2) "20"
3) "man"

HINCRBY

127.0.0.1:6379> HINCRBY heima:user:4 age 2
(integer) 22
127.0.0.1:6379> HINCRBY heima:user:4 age 2
(integer) 24
127.0.0.1:6379> HVALS heima:user:4
1) "LiLei"
2) "24"
3) "man"
127.0.0.1:6379> HINCRBY  heima:user:4 age -2 # 负数就是负增长
(integer) 22

HSETNX

跟string类型的setnx一样,值不存在才执行,如果值已经存在,就不执行了。

127.0.0.1:6379> HSETNX heima:user4 sex woman
(integer) 1
127.0.0.1:6379> HGETALL heima:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
127.0.0.1:6379> HSETNX heima:user:3 sex woman
(integer) 1
127.0.0.1:6379> HGETALL heima:user:3
1) "name"
2) "Lucy"
3) "age"
4) "17"
5) "sex"
6) "woman"
  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值