前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(3)购物车模块---选用Redis还是Mysql存储购物车信息

(3)购物车模块---选用Redis还是Mysql存储购物车信息

原创
作者头像
小时的棒棒糖
发布2023-09-30 22:20:05
1.2K0
发布2023-09-30 22:20:05
举报
文章被收录于专栏:浅谈电商系统的实践经验

计算机哲学思想:选择的本质--权衡,没有完美的选择,优先选择成本远大于收益的

1. 购物车的细分

需求:用户未登录的时候,添加到购物车的商品,需要在用户登录后,合并到用户之前名下的购物车中,如果用户未登录关闭浏览器或者小程序,下次展示这次的购物车信息

解决方案:

方案:为了解决这个问题,需要前端提供未登录的“暂存购物车”,后端实现登录后端“用户购物车”

前端可以将数据存储在Cookie(浏览器)或者LocalStorage(App和浏览器)

Cookie和LocalStorage:

cookie存储上限4K,客户的每次请求后端都会带着,这样服务端可以读写Cookie的数据,而且不用增加客户的代码,业务逻辑都由服务端实现

LocalStorage:存储容量大,但是只能客户端访问LocalStorage的数据

两者都能很好的满足需求,建议:小型电商用Cookie,如果电商面对的用户是批发商户,一次加购的购物车商品比较多,建议使用LocalStorage

2,购物车的后端存储实体--用户购物车的实现

代码语言:txt
复制
购物车的信息存储实体信息比较简单,就是SKUID(商品id),数量,加购时间,是否勾选☑️

可供选用的方案:

  1. 提高访问速度,用Redis
  2. 使用Mysqll,扩展性强

redis的数据结构使用哈希结构,具体如下:

以用户 ID 作为 Key,用一个 Redis 的HASH 作为 Value 来保存购物车中的商品

代码语言:java
复制
// Redis hashh
{
    "KEY": 123,
     "VALUE": [
        {
            "FIELD": 8888,
            "FIELD_VALUE": {
                "timestamp": 1578721136,
                "count": 1,
                "selected": true}
        },
        {
            "FIELD": 8889,
            "FIELD_VALUE": {
                "timestamp": 1578721137,
                "count": 2,
                "selected": false}
        }
    ]
}

我们来比较一下使用 MySQL 和 Redis 两种存储的优劣势:

1.redis性能比Mysql高出一个量级,可以支撑更多的并发请求

2.Mysql的可靠性要好于Redis,因为Redis是异步刷盘,有可能会丢数据,但是丢失少量的商品数据在这个场景可以接受,问题不大,Redis的可靠性不高这个缺点就可以接受

3.Mysql是关系型数据库,提供丰富的查询方式和事务机制,对于今天讨论的需求没有发挥出威力,但是每一个电商系统有自己的个性化需求,比如统计一下今天加购的商品总数量,使用Mysql就很容易实现

综合比较下来,考虑到需求总是不断变化,还是更推荐你使用 MySQL 来存储购物车数

据。如果追求性能或者高并发,也可以选择使用 Redis

总结:

  1. 方案的选择有时不只一种,要结合技术特点和场景来选择 做好选择要权衡利弊,方法论是解决主要矛盾,忽略次要矛盾,这样成本才能远大于收益,没有完美的选择,更没有通吃的银弹,只有取舍,方案选用亦是一样的道理
  2. 不要让一些“常识”禁锢你的选择 比如说购物车系统选用redis后,有可能丢数据,对于完美主义的技术控来说:这是不完美的方案,每个选择都是有成本和收益的,比如,一般我们都认为数据是绝对不可以丢的,也就是说不能牺牲数据可靠性。但是,像刚刚讲到的用户购物车的存储,使用 Redis 替代 MySQL,就是牺牲了数据可靠性换取高性能。我们仔细分析后得出,很低概率的情况下丢失少量数据,是可以接受的。性能提升带来的收益远大于丢失少量数据而付出的代价,这个选择就是划算的。如果说不考虑需求变化这个因素,牺牲一点点数据可靠性,换取大幅性能提升,选择 Redis才是最优解。

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 计算机哲学思想:选择的本质--权衡,没有完美的选择,优先选择成本远大于收益的
  • 1. 购物车的细分
  • 2,购物车的后端存储实体--用户购物车的实现
  • 总结:
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档