我们的系统内部有一个社交网络,我们已实施了一个时间表,向用户显示他们可以看到的内容(其他用户和他所属社区的信息)。假设我们在数据库上命中了一些linq-to-sql
查询,它可以正常工作,并且用户可以对帖子执行评论和对帖子执行 之类的操作。我们在javascript上也有一个间隔计时器,该计时器请求对时间轴进行一些更新(向用户显示新帖子等)。将时间轴作为无限滚动加载10 x 10(根据用户看到的内容)。
我们想提高此方法的性能,并且正在考虑如何缓存时间轴。主要问题是我们有很多posts
(超过10000个带有评论和喜欢的内容),并且缓存整个post
表不是一个好主意。我们已经对其进行了测试,并获得了较差的性能,因为我们的缓存很大,并且使用linq(在内存中)处理页面的速度很慢。
有什么主意如何根据需求和用户来加载缓存?还是有其他选择。
我们可以使用Redis或.Net MemoryCache实现。
谢谢。
答案 0 :(得分:1)
没有人可以浏览整个历史记录,无需将所有内容加载到缓存中。
每次用户请求一个新页面时,如果该页面不在缓存中,则将其加载,并将接下来的10个项目加载到缓存中。这样,第一个请求是唯一一个可能对每个用户都比较慢的请求。
还要在每个页面上设置一个到期日期,如果没有人以X时间单位请求,则将其从缓存中删除。
请注意,在创建新项目时必须对页面进行重新排序(第一页中最早的条目必须移至第二页等)。 (或仅将所有内容保留在一个列表中,但使用列表实现,该实现不会在位置0插入某些内容时强制移动项目)