需求:用户未登录的时候,添加到购物车的商品,需要在用户登录后,合并到用户之前名下的购物车中,如果用户未登录关闭浏览器或者小程序,下次展示这次的购物车信息
解决方案:
方案:为了解决这个问题,需要前端提供未登录的“暂存购物车”,后端实现登录后端“用户购物车”
前端可以将数据存储在Cookie(浏览器)或者LocalStorage(App和浏览器)
Cookie和LocalStorage:
cookie存储上限4K,客户的每次请求后端都会带着,这样服务端可以读写Cookie的数据,而且不用增加客户的代码,业务逻辑都由服务端实现
LocalStorage:存储容量大,但是只能客户端访问LocalStorage的数据
两者都能很好的满足需求,建议:小型电商用Cookie,如果电商面对的用户是批发商户,一次加购的购物车商品比较多,建议使用LocalStorage
购物车的信息存储实体信息比较简单,就是SKUID(商品id),数量,加购时间,是否勾选☑️
可供选用的方案:
redis的数据结构使用哈希结构,具体如下:
以用户 ID 作为 Key,用一个 Redis 的HASH 作为 Value 来保存购物车中的商品
// 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
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。