Redis中Hash类的操作

Redis中Hash类型是键值对的形式保存数据,其中键被称为字段(field),值称为字段值(value)。在一个key中,字段不能重复,而值可以重复。无论是字段还是值都是无序的(保存的次序和添加的次序不同)

    默认情况下hash使用listpack存储,当保存的字段-值的数量大于512个或者当个字段的值大于64个字节时,改为hashtable。


一、使用场景
1、购物车

    可以使用redis的hash实现购物车,字段为商品的信息,值为数量

2、权限列表

    保存用户的权限,字段为权限的标识 ,值为状态

3、缓存进度

    比如小说的阅读进度,字段为小说编号,值为位置。还比如视频的播放进度,字段为视频编号 ,值为已播放的位置。

二、添加和修改
1、hset

向Hash中添加一到多个字段和值,返回添加成功的数量,如果其中某个字段名已存在,会忽略此字段的添加

语法

hset key field value [field value ...]

示例

//添加两个商品类型,添加成功,返回2
hset product_type 1 家电  2 鞋帽

//字段1已存在,只会添加3,返回1
hset prouct_type 1 果蔬 3 成衣

2、hmset

    向hash中添加一到多个字段和值,与hset不同的是,当字段已存在,它会替换原来的值,如果成功,返回“OK”

语法

hmset key field value [field value ...]

示例

//添加两个商品类型,2会把之前的鞋帽替换,返回OK
hmset product_type 2 '手机' 6 '数码'

3、hsetnx

    仅当字段不存在时,才会添加此字段和值,成功返回1,失败返回0

语法

hsetnx key field value

示例

//添加一个新的字段
hsetnx product_type 7 '保健'

三、删除
1、hdel 

    删除一个或多个字段,返回实际删除的字段数量

语法

hdel key field [field ...] [exists match field]

其中

exists match为判断条件,如果指定字段存在,则删除此字段,否则不删除

示例

//删除1和9两个字段
hdel product_type 1 9

//如果3存在,则删除
hdel product_type exists match 3

四、查看
1、hexists

    用于判断指定的字段是否存在,如果存在返回1,不存在返回0

语法

hexists key field

示例

//判断字段2是否存在
hexists product_type 2

2、hlen

    用于查看字段的数量

语法

hlen key

示例

hlen product_type

3、hgetall

    查看所有的字段和值,返回的结果的格式为 

字段名
字段值
字段名
字段值
........ 

语法

hgetall key

示例

hgetall product_type

4、hkeys

    查看所有字段的名称,返回字段名列表

语法

hkeys key

示例

hkeys product_type

5、hvals

    查看所有的值,返回字段值列表

语法

hvals key

示例

hvals product_type

6、hget

    查看指定字段的值,如果字段不存在,返回null

语法

hget key field

示例

hget product_type 2

7、hmget

    查看一到多个字段的值,如果字段不存在,对应的值返回为null

语法

hmget key field [field ...]

示例

hmget product_type 1 2 3

8、hscan

    以游标的方式查看所有或符合条件的字段和值

语法

hscan key cursor [MATCH pattern] [COUNT count]

其中 

    cursor:为游标名,一般为0,即游标开始的位置

   match:筛选条件,pattern为条件,可以使用“*”做为通配符来进行模糊匹配

    count:从指定的游标开始,在此指定字段数中查询,默认值为10,在默认情况(存储结构不是hashtable)下此值无效,只有当hash中字段数大于512或者某个字段的值的长度大于64个字节的时候才有效(ziplist存储结构会转换成hashtable)。

    但要注意的是实际查询的数量会等于或大于count,特别是指定了match时。

示例

//查看所有字段和值
hscan product_type 0

//查看所有字段
hscan product_type 0 match '*'

//查看字段名中包含1的字段
hscan product_type 0 match '*1*'

//返回前2个字段
hscan product_type 0 count 2

9、hincrby

    为字段添加指定的整数增量,如果此字段的值不是数值,会提示错误“ERR hash value is not an integer”,如果成功返回增加增量后的值

语法

hincrby key field increment

示例

//添加一个整数值的字段
hset product_type 11 '11'

//字段值加3
hincrby product_type 11 3

10、hincrbyfloat

    为字段添加指定的浮点数增量,如果此字段的值不是数值,会提示错误“ERR hash value is not an integer”,如果成功返回增加增量后的值

语法

hincrbyfloat key field increment

示例

//添加一个整数值的字段
hset product_type 10 '10'

//字段值加2.5
hincrbyfloat product_type 10 2.5

11、hstrlen

    查询值的字节数

语法

HSTRLEN key field

示例

hstrlen product_type 10

 文章来源于哔站《Redis中Hash类的操作

更多学习视频和专栏文章请到哔站个人空间: 布道师学院的个人空间-布道师学院个人主页-哔哩哔哩视频

更多资源和项目下载请到:”开源吧(找实战项目和毕设项目的好网站)“ ​ :开源吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱分享的代码君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值