Redis之3———hash类型详解:常用操作、业务场景

目录

1 key的命名规范

2 hash类型

3 基本操作

1 hset key field value:添加修改数据

2 hget key field,hgetall key:获取数据

3 hdel key field1 [field2]:删除数据

4 hmset key field1 value1 field2 value2……:添加修改多个数据

5 hmget key field1 hield2……:获取多个数据

6 hlen key:获取hash表中字段的数量

7 hexists key field:获取hash表中是否存在指定字段

8 hkeys key:获取hash表的所有字段名

9 hvals key:获取hash表中的所有字段值

10 hincrby key field increment / hincrbyfloat key field incremnt:给字段的数值加上increment

11 hsetnx key field value

4 hash类型的操作注意事项

5 hash的应用场景:购物车


在介绍hash之前我们首先介绍以下key的命名规范。

1 key的命名规范

由于redis中的热点数据都是来源于关系型数据库,因此要将数据对应起来,我们一般情况下key的命名规范如下:

表名:主键名:主键值:字段名

例如redis中有一条数据来自于关系型数据库的表student中的id为1001的学生的name

那么我们就可以设置key的名字为:

student:id:1001:name

这样的命名规范一目了然,并且简洁。

2 hash类型

如果需要在redis中存储一个人的多个信息,我们可以采用Json的格式来存储,但是如果有频繁的更新操作那么Json存储就显得笨重,但是如果我们分开来存储,那么但是它又是属于一个整体,分开存储又显得不合适,如下所示:

如上图:hash类型即是在value里面再嵌套一个key-value,如下图所示。

hash类型:

  • 新的存储需求;对一些列存储的数据进行编组,方便管理,典型应对存储对象信息
  • 新的存储结构:一个存储控件保存多个键值对数据
  • hash类型底层使用hash表结构实现数据存储,如果field数量较少,存储结构优化为数组结构,如果filed比较多,使用HashMap结构。

3 基本操作

1 hset key field value:添加修改数据

2 hget key field,hgetall key:获取数据

hget key field可以拿单个field里面的数据,比如我们要拿user name 里面的数据:

hgetall 通过key可以拿到所有的数据,单数为field,双数为value.如下图所示:

3 hdel key field1 [field2]:删除数据

例如我们将user 里面的weight删除。

4 hmset key field1 value1 field2 value2……:添加修改多个数据

如上图,name已经修改了,并且添加了weight为50,hmset存在就改,不存在就加。

5 hmget key field1 hield2……:获取多个数据

6 hlen key:获取hash表中字段的数量

即user里面有3个字段,即field的个数。

7 hexists key field:获取hash表中是否存在指定字段

如上图,user里面存在字段age,不存在字段high。

8 hkeys key:获取hash表的所有字段名

9 hvals key:获取hash表中的所有字段值

10 hincrby key field increment / hincrbyfloat key field incremnt:给字段的数值加上increment

如上如,先通过hincrby给age加了10,再通过hincrbyfloat给age加了10.5

11 hsetnx key field value

只有field不存在的时候才设置它的值。

4 hash类型的操作注意事项

  • hash类型value只能存string
  • 每个hash可以存储2的23次方减1个键值对
  • hgetall可以获取全部属性,如果内部field过多,整体效率会降低。

5 hash的应用场景:购物车

电商中的购物车一般如下图所示:

首先每个用户都有自己的一个购物车,每个购物车里面的商品不止一个,并且每个商品的数量也不止一个。

因此我们可以用用户的id作为key,用购物车商品的编号作为field,用商品的数量作为value。

同时相关的操作也可以实现,例如hget、hincrby可以对商品数量进行操作,hgetall可以对应全选操作,hdel对应删除操作,hlen还可以得到购物车中的商品总数量。

如果我们仅讨论购物车的redis存储模型:添加、浏览、更改数量、删除、清空等,那么hash是完全可以实现这个模型的。

解决方案如下:

redis通常可以应用于抢购、限购、限量发放优惠卷、激活码等业务的数据存储设计。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章