redis-hash类型

一:hash类型的使用事项

redis-hash类型

 hset  user(key) name (field)zhang(value)

redis-hash类型

hget user name

redis-hash类型

hgetall user 获取所有field和value

redis-hash类型

hkeys user  获取所有field

redis-hash类型

hvals user 获取所有的value

redis-hash类型

hincrby user age 10 给指定字段增加指定值

redis-hash类型

hlen user 获取哈希表中字段的数量

redis-hash类型

hdel user name 删除field

redis-hash类型

hexists user name 判断field是否存在

redis-hash类型

二:hash类型的使用场景

(1)购物车模型

redis-hash类型

 hmset 5f618dda4b33be7671c04294 1001 5 5f618dda4b33be7671c04294 1002 3

问题:此时用户id可以从session里面取,商品id怎么取值呢,因此还是要去查询一次数据库,获取商品的id,图片等其他信息,无疑多了一次查库操作,因此我们的存储形式需要进行改变。

redis-hash类型

重点:一个用户id里面可以存储,

商品id:nums value

商品id:info json字符串(存储更多的信息)

hash 用value存储json字符串

hash 的 field 通过 物体的统一标识符 :物体的属性组合,可以多个field来表示一个物体的所有信息

那么问题又来了,给id为wang的用户也增加一个001商品的信息,结果如下,001:info冗余,1000个购物车都收藏了这个商品,那么冗余1000个信息

redis-hash类型

问题:每一次用户进去根据用户的id和商品id取一次商品的info,进行展示,效率太低。因此这个信息可以单独提出来,单独保存。001:info ,保存为一个独立的hash

set 001 uri xxx.jpg product_arda xxxxxx

需要显示商品详情的信息从公共的hash取值即可。

此时zhang用户要给购物车此商品数量变成200个,hset zhang 001:nums 200 即可

redis-hash类型

hsetnx zhang 001:nums 400 如果zhang里面有001:nums字段的话,不做任何操作,没有的话就设置,也就是同id的商品,在购物车里面添加就不做任何操作,不在购物车里面就可以添加。

redis-hash类型

(2)抢购

redis-hash类型

 card为商家id card03为商品id 1000为商品数量

redis-hash类型

抢购到card30,就减1,Incrby -1,到数量为0的时候,进行判断,返回商品售罄,真正业务中是要用事务的。

redis-hash类型