缓存一长串很少更改的数据的最佳方法是什么?

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

这适用于在 Azure 上运行的 Blazor 服务器应用程序。在应用程序中,很多时候用户会从很长的列表中选择几个标签。该列表的内容很少发生变化,当发生变化时,只有同一个应用程序会更改它,以便它可以同时更新列表中的条目。

这就像 Stack Overflow 上的标签。整个列表被频繁查询,您需要在内存中使用全局

List<Tag>

这提出了两个问题。首先,这些标签通常会传递到DxTagBox。当用户编辑页面,并且 DxTagBox 正在对该列表应用过滤器以确定要显示的内容时,可以更改该页面(仅创建/更新 - 不可删除)。

我向 DevEx 提出了一个问题,但假设 DxTagBox 想要一个不可变的列表,最好的方法是什么?我想出的最好的办法是我有一个静态列表和一个实时列表。静态列表被传递到 DxTagBox 并更新实时列表。每隔 N 分钟,我会将活动列表复制到静态列表以备将来需要,并让垃圾收集确定何时释放现在的孤立列表。我并不热衷于这种方法,但这是我想出的最好的方法。

第二个问题是:当我有多个服务器时,如何在服务器之间复制更改? Redis 在这里能正常工作吗?我是否应该通过每个 CRUD 操作向所有其他服务器广播消息?我应该每 N 分钟重新读取数据库中的所有内容吗?

caching azure-web-app-service memcached blazor-server-side
1个回答
0
投票

我对此的看法是:

  1. 跨多个服务器的“真相的一个版本”相当于一张数据库表。
  2. 为每个条目添加时间戳,以便您可以快速查询以检查最近是否有任何记录发生更改。避免在不需要时盲目拉动列表。
  3. “该列表的内容很少更改”,因此在单例服务中每 x 秒检查一次新时间戳。
  4. 将数据读入不可变对象而不进行跟踪[我假设您正在使用 EF]。您的 POCO 是
    record
    ,而不是
    class
  5. 定义单独的过滤器,以针对单例列表显示为
    IEnumerable
    ,并且仅在使用它们时(在 DXTagBox 中)实现它们。不要创建中间列表。
© www.soinside.com 2019 - 2024. All rights reserved.