首页 > 解决方案 > 按需加载缓存

问题描述

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

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

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

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

谢谢你。

标签: c#.netcachingredisarchitecture

解决方案


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

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

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

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


推荐阅读