代码之家  ›  专栏  ›  技术社区  ›  Felipe Oriani

按需加载缓存

  •  1
  • Felipe Oriani  · 技术社区  · 7 年前

    我们的系统内有一个社交网络,我们实施了一个时间表,向用户展示他们所能看到的内容(来自其他用户和他所属社区的帖子)。如果我们有一些 linq-to-sql 访问数据库的查询工作正常,用户可以执行以下操作: 评论 在柱子上 喜欢 柱子。我们在javascript上还有一个间隔计时器,请求对时间线进行一些更新(用户可以看到新的帖子等)。时间线是无限滚动加载10乘10(根据用户可以看到的)。

    我们想要提高这个方法的性能,我们正在考虑如何缓存时间线。主要的问题是我们有很多 posts (超过10000条评论和喜欢)并缓存整个 post 桌子不是个好主意。我们已经测试了它并得到了一个糟糕的性能,因为我们的缓存得到了一个巨大的大小,并且使用LINQ(内存中)处理页面的速度很慢。

    是否知道如何按需求和基于用户的方式加载缓存?或者还有其他的选择。

    我们可以使用redis或.NET内存缓存实现。

    谢谢您。

    1 回复  |  直到 7 年前
        1
  •  1
  •   jgauffin    7 年前

    没有人会滚动浏览整个历史记录,不需要将所有内容加载到缓存中。

    每次用户请求一个新页面时,如果它不在缓存中,就加载它,并将接下来的10个项目加载到缓存中。这样,第一个请求是唯一一个可能对每个用户都很慢的请求。

    另外,在每个页面上设置一个到期日期,如果没有人以x时间单位请求它,请将其从缓存中删除。

    请注意,创建新项目时必须重新排序页面(第一页中最旧的条目必须移动到第二页等)。(或者只是将所有内容都保存在一个列表中,但是使用一个列表实现,当某个内容插入到位置0时,它不会强制移动项目)