现今我们系统库存以sku为单位,每个sku都有对应库存。
库存信息我们会记录在一个数据库表中,为了性能每次上线我们会将这个数据库表中的库存放入内存中。
需要保证多个用户同时操作内存库存时的线程安全性,这边我们是通过调用tair的incr和desc命令保证库存增减是串形的。
但是有一种可能:
内存库存为1件,2个用户同时购买,第一个用户减完后库存为0,第二个用户为-1。这时如果不做处理就会产生超卖,我们这边会判断如果用户在操作库存时,发现减后的库存量是-1这时我们会加回去,并返回「库存不足」给用户。
最坏的可能性如果是tair挂了,导致所有内存库存不可用,这时我们会用一个库存同步job为同步库存。
时间: 2024-10-04 10:09:49