一:hash类型的使用事项
hset user(key) name (field)zhang(value)
hget user name
hgetall user 获取所有field和value
hkeys user 获取所有field
hvals user 获取所有的value
hincrby user age 10 给指定字段增加指定值
hlen user 获取哈希表中字段的数量
hdel user name 删除field
hexists user name 判断field是否存在
二:hash类型的使用场景
(1)购物车模型
hmset 5f618dda4b33be7671c04294 1001 5 5f618dda4b33be7671c04294 1002 3
问题:此时用户id可以从session里面取,商品id怎么取值呢,因此还是要去查询一次数据库,获取商品的id,图片等其他信息,无疑多了一次查库操作,因此我们的存储形式需要进行改变。
重点:一个用户id里面可以存储,
商品id:nums value
商品id:info json字符串(存储更多的信息)
hash 用value存储json字符串
hash 的 field 通过 物体的统一标识符 :物体的属性组合,可以多个field来表示一个物体的所有信息
那么问题又来了,给id为wang的用户也增加一个001商品的信息,结果如下,001:info冗余,1000个购物车都收藏了这个商品,那么冗余1000个信息
问题:每一次用户进去根据用户的id和商品id取一次商品的info,进行展示,效率太低。因此这个信息可以单独提出来,单独保存。001:info ,保存为一个独立的hash
set 001 uri xxx.jpg product_arda xxxxxx
需要显示商品详情的信息从公共的hash取值即可。
此时zhang用户要给购物车此商品数量变成200个,hset zhang 001:nums 200 即可
hsetnx zhang 001:nums 400 如果zhang里面有001:nums字段的话,不做任何操作,没有的话就设置,也就是同id的商品,在购物车里面添加就不做任何操作,不在购物车里面就可以添加。
(2)抢购
card为商家id card03为商品id 1000为商品数量
抢购到card30,就减1,Incrby -1,到数量为0的时候,进行判断,返回商品售罄,真正业务中是要用事务的。