Java:重新加载内存缓存(例如Guava),每5分钟将新条目写入数据库中

问题描述 投票:0回答:1

我有一个用例,其中我将静态(不可更改)记录从DynamoDB缓存到内存中的缓存中。假设我在应用程序启动时使用来自DynamoDB的所有记录加载了缓存。如果我想定期重新加载缓存以将新记录写入DynamoDB,是否可以通过一种方法创建重新加载缓存策略,在该策略中查询DynamoDB仅在特定时间戳后向我提供记录?我的目标是避免在缓存重装期间为缓存中已有的记录避免不必要的DynamoDB读取。

非常感谢有人可以对此发表看法。公开讨论我是否需要使用与Guava不同的内存缓存,这对于这种使用情况会更好。谢谢

caching amazon-dynamodb guava preload
1个回答
0
投票

您可以使用以下架构。

  1. 具有一个监听动态发电机流的lambda函数。
  2. 在每次插入时发送sns通知。 (因为数据永远不会按照您的问题进行更新)
  3. 应用程序侦听sns通知并更新缓存中的记录。

enter image description here

此解决方案有类似的问题

  1. 更新是实时的,延迟超过5分钟。考虑到您的数据库上不会出现读取峰值,这是更好的选择。
  2. 考虑到dynamodb的最大大小为400kb,您不能在sns通知中发送完整记录,但对于sns,则为256 KB。
  3. 新实例的水合状态仍然很棘手。 (您可以尝试延迟加载条目,而不是从头开始创建完整状态。

如果您对延迟的要求不是很高,那么您可以将单个缓存实例与从属实例结合在一起,而不是将状态保持在如此多的应用程序实例中。遵循以上架构。

© www.soinside.com 2019 - 2024. All rights reserved.