【问题标题】:Loading cache on demand按需加载缓存
【发布时间】:2019-03-23 14:05:39
【问题描述】:

我们的系统中有一个社交网络,并且我们已经实施了一个时间表来向用户展示他们可以看到的内容(来自其他用户和他所属社区的帖子)。鉴于我们在数据库中有一些linq-to-sql 查询,它工作正常,用户可以对帖子执行诸如 cmetslike 帖子之类的操作。我们还在 javascript 上有一个间隔计时器,它请求对时间线进行一些更新(用户可以查看新帖子等)。时间线是无限滚动加载 10 x 10(根据用户可以看到的)。

我们想提高这种方法的性能,我们正在考虑如何缓存时间线。主要问题是我们有很多posts(超过10000 个有cmets 和likes)并且缓存整个post 表不是一个好主意。我们已经对其进行了测试并得到了一个糟糕的性能,因为我们的缓存大小很大并且使用 linq(在内存中)处理页面很慢。

有什么想法可以根据需求和基于用户的方式加载缓存吗?还是有其他选择。

我们可以使用 Redis 或 .Net MemoryCache 实现。

谢谢。

【问题讨论】:

    标签: c# .net caching redis architecture


    【解决方案1】:

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

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

    还要在每个页面上设置过期日期,如果在 X 时间单位内没有人请求,则将其从缓存中删除。

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

    【讨论】:

    • 嗨@jgauffin,是的,当我们谈论到期日期和如何缓存时,我们知道如何处理缓存。问题是每个用户都可以看到不同的时间线(因为用户只看到关于他是什么社区以及他被标记的帖子的帖子)。如果我缓存(例如:上个月的帖子),一些用户可能不会在第一页看到 10 个帖子(或者必须在数据库中找到差异)。
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多