【问题标题】:What will be my choices for implementing cache in this case?在这种情况下,我实现缓存的选择是什么?
【发布时间】:2014-06-03 19:28:34
【问题描述】:

在我的网站上,我使用的是 Apache、MySQL 和 Memcached。

我已经实现了一个系统,用户将在他的feed 页面上看到他的朋友的某些更新。虽然它正在工作,it's slow。当然是!每次加载页面时,都会一次又一次地从 MySQL 中获取数据。因此,我头疼不已,想着用 Memcached 缓存这些数据的正确实现。我想到了以下几点:

  1. 每次都获取数据(当前)(太慢了)
  2. 将来自每个用户的更新存储在 Memcached 中的单独键中。然后在加载页面时,从 Memcached 中获取数据,对其进行排序、修剪或任何我想做的事情。
  3. 单独存储每个用户的提要。但这意味着,当用户发布更新时,他所有朋友的缓存都必须更新,从而导致额外开销。

在第 2 和第 3 中,还会有另一个问题。我不相信 Memcache 的 1mb 对象限制可以存储这么多数据。然后,有几个竞争条件的风险。如果 2 个朋友同时发布更新,导致用户的提要缓存被更新两次怎么办? (当然,如果 Memcached 进程是原子的,这不会成为问题,但我仍然认为这不是正确的做法。)

您对此有何看法?实现我想要的最佳方法是什么?

【问题讨论】:

    标签: php mysql caching memcached


    【解决方案1】:

    让您登录的客户注册到他们所有朋友频道的监听器。如果有人在他的时间线上添加了一些东西,请检查是否有为此注册的听众。如果是这样,请发布到这些客户端(使用队列、推送等)。

    【讨论】:

    • 但这就是问题所在。我如何store 更新?即使我将它们存储在 MySQL 中,也会出现主要问题。每次用户加载他的提要时都必须获取它。 (P.S. 这不是时间线:P)
    • 数字是多少:有多少用户,每个朋友的用户数,每个用户的消息数?
    • 我的网站还没有上线,所以只能猜测一下。假设每个用户有大约 100 个朋友,他的每个朋友每天进行 50 次更新。这仅适用于一位用户。我的网站为社交网络提供了一个相互关系系统。让我们暂时忘记私人消息,并专注于他们的提要更新。每次更新都会在表中插入一个新行。
    • 您已经有一个名为“feed_messages”的表(id、user_id、friend_id、message_id、日期)?
    • 是的,包含以下字段:id, user_id, content, visibility, posted_time 其中 user_id 是发布更新的用户的 ID。然后当用户加载他的提要时,我会得到他朋友的 ID 列表,然后从列表中选择 id 的数据库。
    猜你喜欢
    • 2013-04-23
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2023-02-02
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    相关资源
    最近更新 更多