当前位置: 代码迷 >> J2EE >> 唯品会购物袋有关问题
  详细解决方案

唯品会购物袋有关问题

热度:92   发布时间:2016-04-17 23:42:26.0
唯品会购物袋问题
想了解下唯品会购物袋过20分钟失效,是什么机制实现的?
定时器?这个是我现在能想到比较low的方式,如果是定时器,定时任务多长时间跑一次,是用一台机器做的定时任务还是多台集群做的,如果是集群那怎么保证数据分片平均的落在不同机器上?
------解决思路----------------------
集群中的session复制有几种,最常用的是内存复制,客户端的session会话数据在各个集群服务器的内存中存储,且按类似磁盘raid的方式进行冗余分布(冗余度可以设置),比如一个会话数据有1024K,服务器按256K切分成,假设集群有2台服务器,冗余为1,那么有可能存储的方式是:
集群节点A:会话数据分片1,会话数据分片2,会话数据分片3副本,会话数据分片4副本
集群节点B:会话数据分片1副本,会话数据分片2副本,会话数据分片3,会话数据分片4
------解决思路----------------------
服务器上有一个定时器观察数据库中的一个表中的数据,这个记录中包括添加时间和商品编号,每次轮询删除添加时间在20分钟之前的。在计算库存时也只拿商品库存 + 表中20分钟内的记录的预定库存。只要计算库存时只看20分钟内的记录的话,多少时间清除失效的预定记录就无所谓了,在客户看购物车时超过20分钟就提示商品预定记录失效,给一个按钮“重新添加到购物车中”就可以了。
------解决思路----------------------
说起来,没有定时器也无所谓,只要计算可用库存时只看20分钟内的预定记录 + 原始库存就可以了,当客户查看购物车时再次计算可用库存并检查他之前添加的商品是否依然有库存可用(重新按添加时间来排队)。在客户付钱或删除这个商品时从表中去掉这个记录就可以了。
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

我没把问题描述清楚,把东西加入到购物袋中时要进行库存冻结,过20分钟没有下单,购物袋失效,要进行库存解冻。这其中有续命问题,我想知道他怎么触发让购物袋失效的。难道有个定时任务每隔一秒去跑下,检查这一时刻哪些购物袋到期应该失效?还是有什么其他机制去实现


搞个线程后台跑是可以的,不过有更简单的方式,现在的缓存都自带过期的功能,直接用就可以了


缓存过期是不能触发事件的,过期了还要释放库存


购物车里的东西还要占库存?!
------解决思路----------------------
难道你说的购物袋就是预定的意思?进入购物袋就锁定库存?
  相关解决方案