+
95
-

回答

假设一个mysql数据库表为stock,商品id是prodid

表如下

stocknums  prodid

105             10200001

我们对商品编号为1020001的商品减库存100,我们使用mysql的行锁来解决,代码如下:

SELECT stocknums FROM 'stock' WHERE prodid = 10200001 FROM UPDATE;
UPDATE stock SET stocknums=stocknums-100 WHERE stocknum>=100 AND prodid=10200001;

请记住,后面的where stocknums>=100是解决超卖的关键。

那么如果使用redis怎么解决呢?

使用decrby 原子操作,返回小于0就表示超卖,代码如下:

decrby 10200001 100

网友回复

我知道答案,我要回答