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

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

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

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

您可以使用以下架构。

  1. 具有一个lambda函数来监听动态流。
  2. 在每次插入时发送sns通知。 (因为数据永远不会像您所说的那样更新)
  3. 应用程序侦听sns通知并更新缓存中的记录。

enter image description here

此解决方案几乎没有类似问题

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

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

本文链接:https://www.f2er.com/2936776.html

大家都在问