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

本文探讨了在Redis中实现购物车功能时遇到的问题及解决方案。首先,仅存储商品ID导致用户无法查看商品详情;接着,尝试从数据库再次查询商品信息会降低购物车加载速度;然后,将商品信息一同存储在Redis中又引发更新数量时的冲突;进一步优化为商品数量和信息分开存储,但可能导致冗余数据;最后提出将商品信息独立存储,避免冗余并提高效率。文章围绕Redis缓存策略进行了深入讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、付费专栏及课程。

余额充值