根据DynamoDB
DAX
文档,DAX
维护两个独立的缓存:一个用于对象,一个用于查询。没关系,我猜。
麻烦的是,如果您更改了一个对象,并且该对象的更改值应该影响存储在查询缓存中的值,则似乎无法通知DAX
它,这意味着查询缓存在其TTL
过期之前将是错误的。
这是相当有限的,似乎没有任何简单的方法可以解决它。
有人告诉我我不知道我在说什么,并且有一种方法可以建议DAX
驱逐查询缓存值。
根据DynamoDB
DAX
文档,DAX
维护两个独立的缓存:一个用于对象,一个用于查询。没关系,我猜。
麻烦的是,如果您更改了一个对象,并且该对象的更改值应该影响存储在查询缓存中的值,则似乎无法通知DAX
它,这意味着查询缓存在其TTL
过期之前将是错误的。
这是相当有限的,似乎没有任何简单的方法可以解决它。
有人告诉我我不知道我在说什么,并且有一种方法可以建议DAX
驱逐查询缓存值。
我希望有一个更好的答案,但不幸的是,除了 TTL 到期之外,目前没有办法更新查询缓存值。通过 DAX 发出的任何 Put 或 Update 请求会立即更新项目缓存值,但如果直接对 DynamoDB 进行任何更改,则不会。
但是,请记住,查询缓存的关键是完整请求;因此更改请求中的任何字段都会触发缓存未命中。显然,这不是一个解决方案,但它可能是解决当前限制的一个选项(hack)。
根据 Dynamo Db 文档,您必须通过 DAX 传递更新查询。
DAX 支持以下写入操作:PutItem、UpdateItem、DeleteItem 和 BatchWriteItem。当您向 DAX 发送这些请求之一时,它会执行以下操作:
DAX 将请求发送到 DynamoDB。
DynamoDB 回复 DAX,确认写入成功。
DAX 将项目写入其项目缓存。
DAX 将成功返回给请求者。
如果对 DynamoDB 的写入因任何原因(包括限制)失败,则该项目将不会缓存在 DAX 中,并且失败的异常将返回给请求者。这可确保数据不会写入 DAX 缓存,除非它首先成功写入 DynamoDB。
所以不要使用update
Dynamo db use的方法UpdateItem
。
要挖掘更多,您可以参考此链接