如果事务失败,通过缓存写入的数据是否会恢复?

问题描述 投票:0回答:1

在通过缓存写入策略中,数据首先写入缓存,然后写入数据库。 参考 - https://codeahoy.com/2017/08/11/caching-strategies-and-how-to-choose-the-right-one/#:~:text=In%20Write%2DBack%2C%20the %20数据,称为%20写%2D在%20后面为%20好。如果向数据库写入数据失败怎么办?缓存中的数据也会被恢复吗?这是如何保持缓存与数据库一致的?

database caching architecture system-design caching-strategy
1个回答
0
投票

这取决于您使用的缓存和数据库。开箱即用,您不应该假设任何事情。

例如,对于直写式缓存,文章提到了 AWS DAX:

DynamoDB Accelerator (DAX) 是直读/直写缓存的一个很好的示例。它与 DynamoDB 和您的应用程序内联。可以通过 DAX 完成对 DynamoDB 的读取和写入。

它为您处理缓存一致性/验证。来自 DAX 和 DynamoDB 一致性模型 文档:

DAX 适用于需要高性能读取的应用程序。作为直写式缓存,DAX 将您的写入同步传递到 DynamoDB,然后自动异步地将结果更新复制到集群中所有节点上的项目缓存。您无需管理缓存失效逻辑,因为 DAX 会为您处理。

还有

如果对 DynamoDB 的写入因任何原因(包括限制)失败,则该项目不会缓存在 DAX 中。失败的异常将返回给请求者。这可确保数据不会写入 DAX 缓存,除非数据首先成功写入 DynamoDB。

因此,如果您决定使用/实现直写式缓存,那么您需要确保在将项目写入数据库失败时它不会存储项目。如何做到这一点 - 取决于所使用的具体技术,有些技术将支持开箱即用的技术(例如 AWS DAX)。

© www.soinside.com 2019 - 2024. All rights reserved.