我们在系统中有一个社交网络,我们已经实现了一个时间线来显示用户可以看到什么(来自其他用户和社区的帖子,他属于)。考虑到我们有一些linq-to-sql
查询,它可以很好地工作,并且用户可以执行一些操作,比如对posts和posts的注释。我们还在javascript上设置了一个间隔计时器,它请求对时间线进行一些更新(用户可以看到新的帖子等等)。时间线是无限滚动加载10乘10 (根据用户所能看到的)。
我们希望提高这种方法的性能,我们正在考虑如何缓存时间线。主要的问题是我们有大量的posts
(超过10000的注释和喜欢),而缓存整个post
表并不是一个好主意。我们已经对它进行了测试,并获得了糟糕的性能,因为我们的缓存具有很大的大小,并且使用linq (内存中)处理页面的速度很慢。
我们是否知道如何通过需求和基于用户的方式加载缓存?或者还有其他的选择。
我们可以使用Redis或.Net MemoryCache实现。
谢谢。
发布于 2018-10-18 20:35:09
没有人会翻阅整个历史,不需要将所有东西加载到缓存中。
每次用户请求一个新页面时,如果它不在缓存中,就加载它,并将接下来的10个项加载到缓存中。这样,对于每个用户来说,第一个请求可能是唯一慢的请求。
另外,在每个页面上设置一个过期日期,如果没有人在X时间单元中请求它,请将其从缓存中删除。
请注意,在创建新项目时,页面必须重新排序(第一页中最古老的条目必须移动到第二页,等等)。(或者只是将所有内容都保存在一个列表中,但是使用一个列表实现,它不会强制在某个位置0插入某项时移动项目)
https://stackoverflow.com/questions/52879516
复制相似问题