与DynamoDBMapper一起使用时,DAX不会获得缓存命中

时间:2020-04-23 01:36:35

标签: amazon-dynamodb amazon-dynamodb-dax

我正在将DAX客户端与DyanamoDBMapper一起使用。我正在使用以下依赖项。

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-dynamodb</artifactId>
            <version>1.11.751</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>amazon-dax-client</artifactId>
            <version>1.0.205917.0</version>
        </dependency>

以下代码显示了Mapper的初始化方式

    AmazonDaxClientBuilder builder = AmazonDaxClientBuilder.standard();
    builder.withRegion("<region>");
    builder.withEndpointConfiguration("<DAX ednpoint>");
    client = builder.build();
    DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(client);

使用此设置时,在DAX指标中,查询的缓存命中率为0,缓存未命中为0。但是,当我删除映射器并使用表进行查询时,我可以看到缓存命中。

我没有使用此处所述的一致读取。 AWS DAX cluster has zero cache hits and cache miss

我在这里做错什么还是在这里错过任何配置步骤吗?

还想知道是否有任何方法可以使每个请求的DAX缓存命中或遗漏详细信息,因此调试可能会更容易一些。

1 个答案:

答案 0 :(得分:1)

缓存未命中的原因是DynamoDBQueryExpression,它默认将consistentRead标志设置为true。

尽管默认情况下DynamoDBMapperConfig进行EVENTUAL一致读取,但DynamoDBQueryExpression设置为一致读取。因此,如果您使用的是DynamoDBQueryExpression,则必须显式将consistentRead设置为false。

当请求一致的读取时,DAX请求将直接转发到DynamoDB,这就是为什么在DAX指标上我们看不到缓存命中的原因。

相关问题