redis 线程安全

来源:7-5 redis预减库存,rabbitmq异步下单

luotuo1089

2018-03-18

多线程处理redis库存,会存在超卖的问题吗?

写回答

2回答

若鱼1919

2018-03-19

int stock = redis.decr();

if(stock <= 0){  

  return 库存不足;

}

假如现在的库存数是1,两个线程同时做decr,库存数就变成-1了。同理,如果有100个并发,那库存数就是-99.

1
1
luotuo1089
好的,明白了,谢谢老师!
2018-03-26
共1条回复

慕无忌9148628

2018-07-17

但是这种情况会有可能出现少卖的情况 压测的时候发现的

我认为MiaoshaController中应该把redis的decr方法和if放到一起才是线程安全的

if(redisService.decr(GoodsKey.getMiaoshaGoodsStock, ""+goodsId) < 0) {

    return Result.error(CodeMsg.MIAO_SHA_OVER);

}

还要麻烦老师来评价一下我认为的是否正确,谢谢


0
5
爱学习的plhh
回复
若鱼1919
好的,谢谢老师。
2020-05-05
共5条回复

Java秒杀系统方案优化 掌握海量访问通用解决方案

各种缓存/JSR303参数检

2695 学习 · 941 问题

查看课程