Redis使用Hash类型的应用场景,提高效率的方法

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不重复存储
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值