面试题答案
一键面试1. 抢购场景
- 应用原因:在抢购活动中,商品数量有限,众多用户同时请求购买,容易出现超卖问题。Redis锁可确保同一时间只有一个用户能成功抢购,防止数据不一致。
- 配合方式:
- 获取锁:用户发起抢购请求,先尝试在Redis中获取锁(如使用SETNX命令)。若获取成功,代表该用户获得抢购资格;若失败,则提示用户抢购失败。
- 操作MySQL:获得锁的用户,在MySQL中查询商品库存。若库存足够,则进行扣减库存并插入订单记录等操作。
- 释放锁:完成MySQL操作后,释放Redis锁,以便其他用户尝试抢购。
2. 库存管理场景
- 应用原因:多系统或多操作同时对库存进行增减操作时,可能导致库存数据不准确。Redis锁用于协调这些操作,保证库存数据一致性。
- 配合方式:
- 获取锁:当有库存变更请求(如出库、入库)时,先获取Redis锁。
- 操作MySQL:获取锁成功后,在MySQL中执行库存变更的SQL语句,如UPDATE语句更新库存数量。
- 释放锁:操作完成后释放Redis锁,其他库存变更请求才可继续执行。
3. 分布式事务场景(涉及MySQL数据操作部分)
- 应用原因:在分布式系统中,不同服务可能需要对MySQL数据进行关联操作,保证这些操作要么全部成功,要么全部失败。Redis锁可以在一定程度上辅助实现分布式事务的一致性。
- 配合方式:
- 获取锁:分布式事务发起时,各参与节点尝试获取Redis锁,只有全部节点获取锁成功,事务才继续执行。
- 操作MySQL:获取锁成功后,各节点执行对MySQL的相关操作,如插入、更新等。
- 释放锁:若所有MySQL操作成功,释放Redis锁;若有任何一个操作失败,回滚MySQL操作并释放Redis锁。