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