面试题答案
一键面试确保缓存一致性和实时性的方案
- 分布式锁方案
- 实现原理:在电商库存扣减场景中,当多个节点要更新Redis缓存中的库存时,首先获取分布式锁(如使用Redis的SETNX命令实现简单分布式锁)。只有获取到锁的节点才能进行库存扣减操作并更新Redis缓存。操作完成后释放锁,其他节点才能竞争获取锁进行操作。这样可以保证同一时间只有一个节点能更新缓存,避免并发更新导致的数据不一致。例如,假设有商品A库存100件,节点1和节点2同时收到库存扣减请求,节点1先获取到锁,将库存更新为99件并释放锁,节点2获取锁后再进行操作,就不会出现库存扣减错误。
- 优点:实现相对简单,能有效避免并发更新冲突。
- 缺点:存在单点故障问题(如Redis单点情况下),且锁的竞争可能导致性能瓶颈。
- 消息队列方案
- 实现原理:以电商库存扣减为例,各个节点接收到库存扣减请求后,将扣减消息发送到消息队列(如Kafka、RabbitMQ)。消息队列会按照顺序依次处理这些消息,一个节点消费消息进行库存扣减和Redis缓存更新。比如,订单系统产生库存扣减请求消息发送到Kafka,Kafka消费者组中的一个消费者节点依次消费这些消息,确保库存更新的顺序性和一致性。
- 优点:能异步处理消息,提高系统吞吐量,且通过顺序消费保证一致性。
- 缺点:引入了额外的系统复杂度,消息可能存在丢失、重复消费等问题需要处理。
- 分布式锁与消息队列结合方案
- 实现原理:先使用分布式锁确保同一时间只有一个节点能向消息队列发送库存扣减消息。获取锁的节点将扣减消息发送到消息队列后释放锁,消息队列按顺序处理消息更新Redis缓存。例如,节点1获取分布式锁,将库存扣减消息发送到Kafka后释放锁,Kafka消费者按顺序消费消息更新缓存,这样既利用了分布式锁的并发控制优势,又利用了消息队列的顺序处理和异步特性。
- 优点:综合了两者优点,提高系统的一致性、性能和可靠性。
- 缺点:复杂度进一步增加,需要对分布式锁和消息队列都有较好的管理和维护。