DAX对象缓存和查询缓存不同步;无法告诉查询缓存驱逐不良数据?

时间:2018-02-15 22:07:14

标签: amazon-web-services caching amazon-dynamodb-dax

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

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

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

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

2 个答案:

答案 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