面试题答案
一键面试库存扣减场景
- 场景描述:在电商系统中,商品库存数量是有限的。当多个用户同时下单购买同一件商品时,需要确保库存扣减的准确性,避免超卖情况。
- Redis锁作用:在扣减库存前,使用Redis的SETNX(SET if Not eXists)命令获取锁。例如,以商品ID作为锁的键,只有获取到锁的线程才能执行库存扣减操作,操作完成后释放锁。这样可以保证同一时间只有一个线程在处理库存扣减,防止超卖。
抢红包场景
- 场景描述:在社交平台或金融应用的抢红包功能中,多个用户可能同时尝试抢同一个红包,要保证红包金额的正确分配,不能出现重复领取或金额分配错误。
- Redis锁作用:以红包ID作为锁的键,用户抢红包时先尝试获取锁。获取到锁的用户可以执行红包金额计算、更新剩余金额等操作,操作完成后释放锁。其他未获取到锁的用户则等待或提示红包已抢完,确保了红包操作的一致性和并发控制。
分布式任务调度场景
- 场景描述:在分布式系统中,有些定时任务或一次性任务可能需要在多个节点上运行,但只希望其中一个节点执行任务,避免重复执行导致数据不一致或资源浪费。
- Redis锁作用:任务启动时,每个节点尝试以任务标识作为键获取Redis锁。获取到锁的节点执行任务,完成后释放锁。其他节点在获取锁失败后知道已有节点在执行任务,不再重复执行,从而保证任务在分布式环境下的唯一性执行。