【问题标题】:Handling Cache with Constant Change of Social Network处理社交网络不断变化的缓存
【发布时间】:2014-08-07 21:22:18
【问题描述】:

使用 Python 的 Django(带有 Rest 框架)创建类似于 Twitter 或 Instagram 的应用程序。

考虑到社交网络不断变化的性质,处理缓存内容(JSON 数据、图像等)的最佳方式是什么?如何在仍然缓存内容以提高性能的同时,仍然显示用户创建新帖子、对帖子点赞/cmets 或删除帖子的更新状态?

如果每次用户执行操作时都要刷新/重新创建缓存,那么就不值得拥有缓存,因为更新频率太快而无法使缓存发挥作用。有什么技巧可以解决这个问题。

请随时分享您在实施解决方案时所学到的方法和一些智慧。任何建议将不胜感激。 :)

【问题讨论】:

  • 这是一个非常笼统的问题,这完全取决于您网站的流量和对象之间的关系,通常即使在高流量网站上,部分缓存也应该能够提高您的性能,您不会'不需要缓存所有内容,只需缓存昂贵的查询,有许多缓存选项,基于时间、部分、基于信号等......它们都取决于您项目的必要性。
  • @petkostas 感谢您的评论。当返回的数据由于用户交互而频繁更改时,如何有效地缓存昂贵的查询?您能为我的研究指明正确的方向吗?
  • 不知道你的用户缓存多久变化一次,平均时间是多少?如果时间真的很短,那么像 varnish 这样的缓存会更有意义,同样,如果您需要处理许多请求,那么您需要考虑 DB 分片和 django 中的 DB 路由器。

标签: python django caching django-rest-framework


【解决方案1】:

一种技术是在它们所引用的媒体内容上键入 URL。例如,如果您要托管图像,则在 url /images/<sha> 中使用图像文件的 sha 哈希。

然后,您可以在这些 URL 上设置远期缓存到期标头。如果图像发生变化,那么您也会更新引用它的 URL,并请求不再缓存的图像。

您可以将此技术用于常规数据库模型以及图像和其他媒体,只要您在对象的任何字段发生更改时重新计算对象的哈希即可。

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多