面试题答案
一键面试设计思路
- 使用发布 - 订阅模式:在商品信息更新时,通过消息队列(MQ)作为发布 - 订阅的媒介。商品信息更新服务作为发布者,将更新消息发送到MQ,而各个缓存节点作为订阅者,从MQ接收更新消息并处理。
- 版本控制:为每个商品数据添加版本号。每次商品信息更新时,版本号递增。缓存节点在处理更新消息时,通过对比版本号来决定是否应用更新,避免重复处理或处理旧版本数据。
- 缓存失效策略:结合定期失效和主动失效。定期失效设置一个合理的缓存过期时间,主动失效则是在接收到更新消息时立刻使缓存失效。
关键步骤
- 消息发送:
- 当商品信息更新操作在数据库完成后,商品服务向MQ发送一条包含商品ID、更新后数据(或至少包含版本号)的更新消息。
- 消息接收与处理:
- 每个缓存节点都有一个消费者从MQ接收消息。
- 缓存节点接收到消息后,先根据商品ID找到对应的缓存数据。
- 对比缓存数据中的版本号与消息中的版本号,如果消息中的版本号更高,则更新缓存数据为新数据(或直接使该商品缓存失效,后续请求时重新从数据库加载)。
- 缓存过期设置:
- 在缓存数据写入时,设置一个合理的过期时间(如几分钟到几小时不等,根据商品数据更新频率调整)。
- 当缓存过期后,下一次请求该商品数据时,缓存节点从数据库读取最新数据并更新缓存,同时获取最新版本号。