业务背景
为了满足用户对一趟列车不同站点不同座位类型的余量查询需求,我们采取了一种优化方案。我们将这些余量信息存储在缓存中,以便用户可以快速查询。
然而,在用户创建订单并完成支付时,我们需要同时从数据库和缓存中扣减相应的列车站点余票。这种设计不仅提高了查询效率,也保证了数据的一致性,确保订单操作的准确性。
在这个业务场景中的缓存与数据库一致性如何保证?
项目实战
通过数据库缓存一致性文章我们了解到,适合咱们这个车票余量缓存的方案是通过 Binlog 异步更新列车缓存,详细逻辑查看上文。
如何保证缓存一致性
我们采用了一种确保缓存和数据库一致性的方案,使用 Canal 监听 Binlog 模式。该方案将数据库的数据变更通过 Canal 转发给消息队列的特定 Topic。客户端应用程序可以监听该消息队列的 Topic,以保持缓存与数据库的一致性。
时序图如下所示: