码迷,mamicode.com
首页 > 其他好文 > 详细

生产环境超时库存回收优化

时间:2015-05-31 23:24:21      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

  业务场景: 

  用户将商品放入购物车后(会将该商品库存减掉,给用户),如果超时20分钟未进行操作则应该进行库存恢复,即将用户购物车中的商品移到超时队列当中,并恢复相应超时商品的库存。这样做是为了防止有用户故意将商品放入购物车,又迟迟不进行购买等操作。

 我们这边有两种形式进行库存恢复处理,一种是当用户查询购物车时如果当前用户购物车超过20分钟,这时认为已超时,将用户购物车对应商品移到超时队列并恢复库存。   

 另外一种是防小人,如果有用户放入商品后,就不做任何操作了,这时如果另外的机制去恢复库存,就会发生大量库存被恶意占用。

 解决方法可以定时跑一个线程去清除已超时的用户购物车。

 最简单的算法就是扫描所有用户购物车,但如果用户量上去,这个时间会耗费很长。一种解决方案是可以根据用户所在区域将购物车进行切分,然后不同区域用单独线程去处理。这是一种优化。但是这种方法会浪费资源,因为有可能某个用户购物车远没有到超时时间,但还是要取出来进行判断。

 解决思路是能不能只处理最有可能超时的用户购物车,这个可以将用户购物车按照时间进行分区域存放,之后每次清理操作只处理一个区域(最早放入购物车的区域,即购物车放放入时间最早)。

 有了思路之后,这个按时间清理购物车的算法数据结构就是一个数组,加一个处理标记指针。

 数组中每个元素存储了要处理的用户购物车及其购物车更新时间。

 整个数组组成一个循环队列。

 例,有5个区域,对应数组下标0,1,2,3,4。那么处理过程是先处理0,然后1,2,3,4。4处理完后又处理0。。。。

 基本是这样一个过程。

 指针指向的区域代表要处理或正在处理的区域。

 用户将商品放入购物车时间,会将用户及购物车时间放入指针指向位置的前一个区域。如指针指向1,则数据将被放在区域0。

 整个要解决的问题就是,在购物车失效时间确定的情况下,处理线程多少分钟运行一次,分成几个区域。

 基本公式如下:

  (x-1)*线程处理周期>=购物车失效时间

 其中x代表区域块数。

生产环境超时库存回收优化

标签:

原文地址:http://blog.csdn.net/zhaozhenzuo/article/details/46292123

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!