数据类型-hash 实现购物车 | 学习笔记

简介: 快速学习数据类型-hash 实现购物车

开发者学堂课程【Redis 入门到精通(基础篇)数据类型-hash 实现购物车】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/764/detail/13378


数据类型-hash 实现购物车

 

内容介绍

一、Hash 类型应用场景

二、业务分析
三、解决方案

 

一、Hash 类型应用场景

业务前景

电商网站购物车设计与实现

 

二、业务分析

●仅分析购物车的redis存储模型

添加、浏览、更改数量、删除、清空

●购物车于数据库间持久化同步(不讨论)

●购物车于订单间关系(不讨论)

提交购物车:读取数据生成订单
商家临时价格调整:隶属于订单级别
●未登录用户购物车信息存储(不讨论)
cookie 存储

先查看一下已有的电商网站购物车,先分析一下,不同的用户购物车是单独使用的,每个人都有一个id,这样就可以区分,然后购物车中,商品是多样的,可能是一样,也可能是多样,甚至于没有,所以这里也有多个,购买商品的数量也是不唯一的,此时就可以使用用户id作为key,商品的id作为field,商品的数量就是value,这样就建立起了最基本的一个结构,hash也实现了,接下来需要考虑的就是购物车的操作hash能否支持。

首先,取值hget,更改时使用增加、设置,hincrby、hset,如果想看全部购物车商品,有一个全选,不想看就使用删除,一个是hgetall,一个是hdel,都可以实现,还有一个功能就是hlen,代表购物车的商品总数量,就是一个hash的hlen的总操作,所有的的功能都可以实现。

不要去想太多的周边,那些暂时还不是我们应该考虑的范围。


三、解决方案

●以客户 id 作为 key,每位客户创建一个hash存储结构存储对应的购物车信息

●将商品编号作为 field,购买数量作为value进行存储
●添加商品:追加全新的 field 与 value
●浏览:遍历 hash
●更改数量:自增/自减,设置 value 值
●删除商品:删除 field
●清空:删除 key

当前设计是否加速了购物车的呈现

当前仅仅是将数据库存储到了redis中,并没有起到加速的作用,商品信息还需要二次查询数据库

●每条购物车中的商品记录保存成两条field

●field1专用于保存购买数量

命名格式:商品id:nums

保存数据:数值

●field2专用于保存购物车中显示的信息,包含文字描述,图片地址,所属商家信息等

命名格式:商品id:info

保存数据:json

Hsetnx key field value

快速构建一个包含两个商品的购物车,为了操作方便,商品的名字等运用简写。

代码:

Hmset 001 g01 100 g01 200

Hmset 002 g02 1 g04 7 g05 100 

这就是两台购物车,现在去查看,都没有问题,然后添加商品hset 001 g03 5,接下来查看一下,hgetall 001,得到购物车的结果,如果说不需要某件商品,接下来hdel 001 g01,然后就删除了,接下来hgetall 001,查看一下,发现删掉了,然后添加,hincrby 001 g03 1,然后再次hgetall,发现增加了一个,此时的添加删除,浏览整个hash都可以做到。

考虑下,是不是购物车显示的就快呢,此时仅仅是将数据存储,还没有起到加速的作用,并且商品还缺少二次数据呈现,缺少商品id,导致用户使用体验极差,还需要去提高效率,将购物车中的商品保存成两条,进行修改,加一个,与我们的第一条一起呈现,把商品对应的信息全部加进来,用一个info,保存为json格式,在读取的时候,所有的数据都可以呈现出来,

做一个简单的测试 hmset 003 g01:nums 100 g01:info{...},

得到信息,通过对应的信 息找到编号,把对应的图片,地址,描述信息,全部放到json 里面,然后提取出来,这样就都可以加载了,如果说003购买,004也需要,那么差别就在于数量不同,hmset 004 g01:nums 5 g01:info{...},然后再次进行一次hgetall 004,得到的就是大量信息重复,两个里面的东西是一样的,

那么现在就有一个想法,把他独立出来,做成一个独立的hash,专门找个地方保存就好,也就是说把他打包成一个包裹,然后使用时直接提取一整个包裹,做成一个专门保存商品的hash,这样做的好处是会极大的提高效率,然后将商品放入单独的hash里面再进行一个小的分类,这样再均匀分散到不同的hash中去,让每个hash存储的数量都有所降低,同时也能保证速度,这样购物车又回到了一个单独的只保存数量的情况,所有的商品信息走公共道。

不同的人购买同一商品,每次都需要将商品包裹提取出来然后再加一次,会很麻烦,此时就用到了一个操作,hsetnx key field value,意思就是说,当前field对应的key存在值,那么就什么都不做,

如果说没有值,那么就加进去,相当于在操做之前做了一次判定,进行一次操作,hset 003 g01:nums 200,回车,

然后hgetall 003,得到数据,如果说hsetnx 003 g01:nums 400,返回integer0,说明失败,如果说hsetnx 003 g05:nums 1,回车这时返回integer1,说明成功,然后进行hgetall 003,发现出现了g05nums,这个指令就可以帮我们兼容,如果说商品的内容发生了变化,那么就使用黄色图更改就好了,就好比是商品活动结束了,然后商品已失效,这就是购物车的场景。

相关文章
|
5月前
|
人工智能 自然语言处理 算法
GEO核心技术解析与GEO服务商选型实战经验分享 ——多模态时代技术适配实践
本文深度解析生成式引擎优化(GEO)核心技术壁垒,基于荷里购科技13个月实践,拆解算法架构、多模态适配、可扩展性与技术支持四大选型维度,实测对比主流GEO服务商技术能力,提出“技术协同”时代的企业级选型框架与落地优化路径。
511 0
|
人工智能 机器人 API
小学生泪目Agent开发古诗助手
本文介绍了如何开发一个帮助小学生背古诗的AI Agent。通过阿里云的百炼大模型平台和千问,实现从需求规划、环境准备到开发与测试的全过程。该Agent不仅能根据主题找古诗、提供作者介绍和练习题,还能生成符合诗意境的图片,使学习更有趣。此外,还展示了如何通过无代码方式在百炼平台上构建智能体应用,简化开发流程。希望这能为学习AI Agent开发提供有益参考。
603 19
|
11月前
|
存储 人工智能 数据可视化
从纸质到AI:2025年办公记录工具的演进与高效管理指南
办公记录工具历经纸质时代、电子化、云端协同到AI增强阶段,逐步成为融合知识管理与任务协作的“数字工作中枢”。其核心价值在于信息捕获、知识沉淀与行动转化。现代工具强调跨平台同步、智能分类、安全加密与生态整合,满足远程办公与高效协作需求。选型时应结合组织规模、功能需求与技术整合性,合理评估成本效益。未来,AI、AR与区块链等技术将进一步推动办公记录工具智能化、可视化发展。
385 0
|
存储 编解码 算法
《从像素到身份:Flutter如何打通社交应用人脸识别的技术闭环》
人脸识别登录是安全便捷的新型登录方式,在Flutter框架下实现需调用原生相机与算法库。其技术原理涵盖人脸检测、图像预处理、特征提取及识别匹配等环节。通过camera库获取人脸图像,借助OpenCV或Dlib等算法库完成识别。为优化体验,需关注性能(如图像压缩、缓存)、交互设计(操作指引、实时反馈)及安全性(数据加密、权限管理)。这一过程挑战与机遇并存,为用户带来全新登录体验。
269 10
|
12月前
抖音对方粉丝列表批量关注,批量全自动私信群发插件,给对方博主的粉丝发送广告
这是一套用于抖音账号运营的自动化脚本工具,可帮助用户快速获取基础流量。通过模拟点击操作,自动完成关注、私信等功能,提高效率。
|
图形学
unity Camera第一人称移动
第一人称视角移动模拟通过检测用户键盘和鼠标输入,实现场景中的位置移动和视角旋转。位置移动基于W、A、S、D键控制相机前后左右移动,视角旋转通过鼠标控制上下左右观察,避免翻转并限制旋转角度。代码使用Unity的Input类和Transform方法实现这些功能,确保流畅的第一人称体验。
|
存储 容器
Flutter 应用服务:主题、暗黑、国际化、本地化-app_service库
Flutter 应用服务:主题、暗黑、国际化、本地化-app_service库
644 0
|
存储 传感器 算法
数字图像处理的图像操作
数字图像处理的图像操作
|
C语言
万字超全详解:二叉树的基本操作(C语言版本)(上)
万字超全详解:二叉树的基本操作(C语言版本)(上)
万字超全详解:二叉树的基本操作(C语言版本)(上)
|
算法 网络协议 网络架构
什么情况下适合使用静态路由?什么情况下适合使用动态路由?
什么情况下适合使用静态路由?什么情况下适合使用动态路由?
984 0