基于Redis(SETNX)实现分布式锁,案例:解决高并发下的订单超卖,秒杀

本文介绍了在高并发场景下如何利用Redis的SETNX命令来防止订单超卖和秒杀问题。通过分布式锁确保线程间的互斥,保证资源的正确访问。详细讲解了SETNX的作用、代码实现以及防止锁误删的解决方案。
摘要由CSDN通过智能技术生成

高并发的情况下订单超卖/秒杀问题

在这里插入图片描述
这里的问题就是在同一时间发过来了两个请求。这两个用户购买同一件数量的商品。线程之间没有互斥。也就是你运行你的。我运行我的。导致在线程1还未实际扣除库存的时候。线程2也获取到了和线程1相同的数量的商品。它两同时扣除库存。这样就出现了订单超卖的问题!!!

解决订单超卖/秒杀的办法

分布式锁
分布式锁就是在多个服务集群的模式下 每个服务下的线程可以做到互斥的效果 这就是分布式锁 并且分布式锁还要达到 高性能 高可见 高互斥 高可用 这样才叫分布式锁

SETNX的作用

setnx就是使用redis实现分布式锁的一种方式 它的特点就是当有重复的锁key查询缓存就会返回false 或者空 那我们就可以利用它这种机制去实现多个服务同时调用同一个方法让所有服务都有互斥的效果

代码实现创建锁

    private final static String SUO_KEY = "cs:suo:";

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    /**
     * 获取锁
     * je: 订单唯一ID
     * @return
     */
    public boolean huoqu(Long je) {
    	// 生成uuid 做锁的value
        String uuid = UUID.randomUUID().toString();
        // stringRedisTemp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值