现实库存处理记录

  现今我们系统库存以sku为单位,每个sku都有对应库存。

  库存信息我们会记录在一个数据库表中,为了性能每次上线我们会将这个数据库表中的库存放入内存中。

  需要保证多个用户同时操作内存库存时的线程安全性,这边我们是通过调用tair的incr和desc命令保证库存增减是串形的。

   但是有一种可能:

    内存库存为1件,2个用户同时购买,第一个用户减完后库存为0,第二个用户为-1。这时如果不做处理就会产生超卖,我们这边会判断如果用户在操作库存时,发现减后的库存量是-1这时我们会加回去,并返回「库存不足」给用户。

  最坏的可能性如果是tair挂了,导致所有内存库存不可用,这时我们会用一个库存同步job为同步库存。


  对于如果用户删除购物车或者购物车超时的情况,这时需要对用户购物车中对应sku增加相应的库存量。这时需要保证有个条件点能够使增加库存这部分不重复加。

我们这边先调用tair的del方法(tair会加锁)然后看返回是否成功,只有第一个线程删除的时候才会成功,成功之后再做库存的增加。

你可能感兴趣的:(现实库存处理记录)