Hash在购物车上的应用
# hmset user_id goods1_id nums1 goods2_id nums2
hmset 01 goods_01 1 goods_02 2 # 用户01将一个商品1、两个商品2加入购物车(以Redis形式存储)
出现的问题与解决[递进式的,(2)√(3)×:如(3)的方法可解决(2)的问题,但(3)会产生新问题]:
(1)×: 对于商品,由于只将其ID加入Redis,因此用户对于购物车中的商品只看到ID,看不到商品的具体信息
(1)√(2)×: 因此,需要依据商品的ID在对应店铺中再查询一次;但会导致购物车的加载速度降低
(2)√(3)×: 所以,在用户添加商品时,要同时把商品信息也存入Redis中;但由于商品数量、商品信息在Key(用户ID)下的同个Field中,若用户在购物车为该商品增加数量,依据hincrby key field increment,显然商品信息无法且没必要进行增加,会导致增加数量失败
(3)√(4)×: 对此,需将商品数量、商品信息在商品ID下,分为两个Field,为了区分,商品数量命名为goods_id:nums,商品信息则为goods_id:info,且value 以JSON格式存储;但若有多个用户添加了同一件商品到购物车,那明显每个Key(用户ID)下的goods_id:info都是相同的,冗余导致性能降低
(4)√(5)×: 据此,要将goods_id:info单独存储在另一个Hash中,通过hsetnx user goods_id:info xxxx存储,此处的user(key)不为user_id,以确保key相 同才能依据Field实现goods_info不重复存储