我们的系统内部有一个社交网络,我们已经实现了一个时间线来向用户展示他们可以看到的内容(来自其他用户和他所属社区的帖子)。鉴于我们有一些 linq-to-sql
查询命中数据库,它工作正常,用户可以执行诸如对帖子的评论和喜欢 帖子。我们在 javascript 上还有一个间隔计时器,它请求对时间线进行一些更新(让用户看到新帖子等)。时间线被制作成无限滚动加载 10 x 10(根据用户可以看到的内容)。
我们想提高这个方法的性能,我们正在考虑如何缓存时间线。主要问题是我们有很多 posts
(超过 10000 strip 有评论和点赞)并且缓存整个 post
表不是一个好主意。我们已经对其进行了测试并获得了糟糕的性能,因为我们的缓存变得很大并且使用 linq(在内存中)处理页面很慢。
是否知道我们如何根据需求和基于用户加载缓存?或者还有其他选择。
我们可以使用 Redis 或 .Net MemoryCache 实现。
谢谢。
最佳答案
没有人会滚动浏览整个历史记录,无需将所有内容加载到缓存中。
每次用户请求一个新页面时,如果它不在缓存中则加载它,并将接下来的 10 个项目加载到缓存中。这样,第一个请求是唯一一个可能对每个用户来说都很慢的请求。
同时在每个页面上设置一个过期日期,如果在 X 时间单位内没有人请求它,则将其从缓存中删除。
请注意,创建新项目时必须重新排序页面(第一页中最旧的条目必须移至第二页等)。 (或者只是将所有内容都保存在一个列表中,但是使用一个列表实现,当在位置 0 插入某些内容时不会强制移动项目)
关于c# - 按需加载缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52879516/