-
Notifications
You must be signed in to change notification settings - Fork 424
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
购物车redis数据类型使用String是好的设计吗? #55
Comments
接下来该说怎么选择Redis的存储结构了,Redis常用的 首先购车一定有一个key来标记这个购物车属于哪个用户的,为了简化,我们的key假设是: 我们先来看如果用 如果用 看起来我们没得选,只有使用
网上也看到很多Redis数据结构组合使用来保存购物车数据的,但是无疑增加了网络开销,相比起来还是String最经济划算。 已经给了分析了呀,hash对于多层级复杂数据格式的购物车设计没啥性能优势而且还添加了操作难度,只有string符合设计要求 |
string 类型,加购场景下时间复杂度是O(n),而且需要把用户全部购物车数据get出来,这样也符合设计要求? |
存储方式string存储:SET uid:cart_type ShoppingDataArr Redis时间复杂度
hash的HGETALL为O(n)大概内部也是循环HGET @hzy38324 你看看我这样想的对不?这里针对的是redis的复杂度 |
嗯,针对redis的复杂度,这样是没问题的,但是也要考虑客户端的时间复杂度吧,redis和客户端都是操作内存 还是以加购举例: 整体分析下来: 至于购物车详情的场景,确实String优于Hash 从大多数电商场景看,加购是多于购物车详情的,用户可能会加购n件后,才打开一次购物车。 |
举个简单的场景,加购一件sku,这时候需要做这几步操作:
1、先根据用户ID,把这个用户购物车全部数据get出来
2、然后在本地内存里,遍历,看是否有对应的skuId
3、有,则把数量+1,然后把全部数据set回去
4、无,则add一个元素,然后把全部数据set回去
时间复杂度O(n) 数据传输量大, 想想如果一个用户购物车加满了,比如200个sku,数据量会很大
另外还要考虑数据版本、看是否要加锁等问题
相反,使用 hash,除了获取购物车详情需要使用 hgetall,在Redis服务端进行操作,时间复杂度O(n)
其他的加购、编辑数量、规格等场景,时间复杂度都是O(1),数据传输量也小
另外相比String,hash数据是结构化的
The text was updated successfully, but these errors were encountered: