面试题答案
一键面试设置过短的问题
- 锁提前释放导致并发冲突:
- 当分布式锁过期时间设置过短时,可能在业务逻辑还未执行完成时,锁就提前释放了。例如在电商系统的库存扣减场景中,假设一个商品库存为100件,有多个用户同时发起购买请求。业务逻辑是先获取分布式锁,然后查询库存,判断库存足够则扣减库存。如果锁的过期时间设置为1秒,而整个库存扣减业务逻辑需要2秒才能执行完。那么在1秒后,锁自动释放,其他等待获取锁的线程可能再次获取到锁,进入库存扣减逻辑,就会导致同一库存被多次扣减,出现超卖的并发冲突问题。
- 频繁获取锁带来性能开销:
- 由于锁过期时间短,业务可能需要频繁重新获取锁。比如在一个分布式任务调度系统中,某个任务处理时间较长,假设为10分钟,但锁的过期时间仅设置为30秒。那么在这10分钟内,任务就需要多次重新获取锁,频繁的锁获取操作会增加系统的网络开销和CPU负担,降低系统整体性能。
设置过长的问题
- 资源长时间被占用导致死锁风险:
- 如果分布式锁过期时间设置过长,可能会导致资源长时间被占用。例如在一个分布式文件系统中,某个节点获取锁来对文件进行写操作,假设锁的过期时间设置为1天。但在获取锁后,该节点突然发生故障,无法正常释放锁。那么在这1天内,其他节点都无法获取锁来对该文件进行写操作,造成了死锁现象,严重影响系统的可用性。
- 降低系统并发度:
- 过长的锁过期时间会使其他等待获取锁的请求长时间等待,降低系统的并发处理能力。例如在一个分布式缓存更新场景中,假设对缓存数据进行更新操作获取锁的过期时间设置为10分钟。如果有多个客户端需要更新缓存数据,由于锁持有时间长,其他客户端只能长时间等待,导致系统在这段时间内只能处理少数几个更新请求,整体并发度下降,影响系统的响应速度。