3

根据DynamoDB DAX文档,DAX维护两个独立的缓存:一个用于对象,一个用于查询。没关系,我猜。

麻烦的是,如果您更改了一个对象,并且该对象的更改值应该影响存储在查询缓存中的值,则似乎无法通知DAX它,这意味着查询缓存在其TTL过期之前将是错误的。

这是相当有限的,似乎没有任何简单的方法可以解决它。

有人告诉我我不知道我在说什么,并且有一种方法可以建议DAX驱逐查询缓存值。

4

2 回答 2

2

我希望有一个更好的答案,但不幸的是,除了 TTL 到期之外,目前没有办法更新查询缓存值。通过 DAX 发出的任何 Put 或 Update 请求会立即更新项目缓存值,但如果直接对 DynamoDB 进行任何更改,则不会。

但是,请记住,查询缓存的关键是完整请求;因此更改请求中的任何字段都会触发缓存未命中。显然,这不是一个解决方案,但它可能是解决当前限制的一个选项(hack)。

于 2018-02-15T22:23:29.150 回答
0

根据 Dynamo Db 文档,您必须通过 DAX 传递更新查询。

DAX 支持以下写入操作:PutItem、UpdateItem、DeleteItem 和 BatchWriteItem。当您向 DAX 发送这些请求之一时,它会执行以下操作:

DAX 将请求发送到 DynamoDB。

DynamoDB 回复 DAX,确认写入成功。

DAX 将项目写入其项目缓存。

DAX 将成功返回给请求者。

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

所以不要使用updateDynamo db use的方法UpdateItem

要挖掘更多,您可以参考此链接

于 2018-10-01T11:27:59.663 回答