储存数据的格式 value只能存字符串,不存在嵌套现象,如果没有获取到,值为nil
最大储存容量 每个Hash对可以储存2^23-1个的键值对

如果使用 String 类型存储粉丝、投稿数需要使用多个Key来储存多个Value,采用 Hash 模式可减少 Key 的使用数量,Hash类型实质可看做 Redis的HashMap,通过 key field value 的形式进行数据储存。设计初衷不是用来储存大量对象而设计的,不能滥用,不可将hash作为对象列表使用。Hash - 图1

基础命令

添加&修改数据:

  1. hset key field value

获取数据:

  1. hget key field //获取Value
  2. hgetall key //获取key对应所有的Field和Value

注:hgetall是获取key下所有的Field和Value,如果数量大,遍历效率会低,可能成为数据访问瓶颈。

删除数据

  1. hdel key field1 field2 ...

添加&修改多个数据

  1. hmset key field1 value1 field2 value2 ...

获取多个数据

  1. hmget key field1 field2 ...

获取key中Field的个数:

  1. hlen key

判断Key中是否存在某个Field:

  1. hexists key field //有值返回1,没有返回0

拓展命令

获取key中所有的Field:

  1. hkeys key //返回的是个列表

获取key中所有的Value:

  1. hvals key //返回的是个列表

自增:

  1. hincrby key field size //指定key的field自增size
  2. hincrbyfloat key field size //指定key的field自增size(float)

注:当 size 是负值是就是减少

不覆盖的创建数据:

  1. hsetnx key field value

使用案例

用户购物车

image.png
先将所有的商品信息建立一个 hash,再将用户的每条商品记录保存为两条Field。第一条储存数量,第二条储存商品信息。第二条仅需储存商品信息hash中的 Key:Field 即可精简储存内容,以此达到加速查询的目的。

商品信息储存:

  1. hmset phone iphone:12 {title:iphone12紫色,price:8888}

用户的存储:

  1. hmset user1 g01:num 12 g01:info phone:apple12

抢购

Hash - 图3
商家商品

  1. hmset sj01 huawei 1000 iphone 1000

用户的购买:

  1. hincrby sj01 huawei -200