面试题答案
一键面试设计思路
- 缓存更新策略:
- 读写分离策略:在写操作(商品信息变化)时,先更新数据库,然后再更新缓存。但这种方式可能会存在短暂的不一致,因为更新数据库和更新缓存之间有时间间隔。
- 失效策略:在更新数据库后,让缓存中的对应商品数据失效,下次读取时发现缓存不存在,从数据库加载数据并重新放入缓存。这种方式实现简单,但可能导致短时间内大量请求穿透到数据库。
- 异步更新策略:更新数据库后,通过消息队列异步处理缓存更新,降低对业务主线程的影响,减少缓存更新操作对系统性能的干扰。
- 缓存粒度控制:
- 对于商品库存、价格等不同类型的数据,可以按照不同的粒度进行缓存。例如,价格可以按商品ID缓存,库存可以按仓库 - 商品ID等更细粒度缓存,这样在部分数据变化时,只需要更新对应的缓存部分,而不是整个商品缓存。
- 监控与补偿机制:
- 建立监控系统,定期检查缓存数据和数据库数据的一致性。例如,定时任务扫描缓存和数据库中商品数据的关键指标,发现不一致时及时进行补偿更新。
可能用到的技术手段
- 缓存技术:
- Redis:广泛应用的缓存数据库,支持多种数据结构,提供原子操作,如
SET
用于更新缓存,DEL
用于让缓存失效。其高性能和丰富的命令集可以满足电商系统对缓存的需求。
- Redis:广泛应用的缓存数据库,支持多种数据结构,提供原子操作,如
- 消息队列:
- RabbitMQ:作为消息中间件,在数据库更新后,将缓存更新任务发送到消息队列。消费者从队列中取出任务,异步执行缓存更新操作,降低系统耦合度,提升系统的稳定性和性能。
- 数据库事务:
- 在更新商品信息到数据库时,使用数据库事务确保数据的原子性和一致性,防止部分更新成功部分失败的情况,保证数据库数据的完整性,为后续缓存更新提供正确的数据源。