在这种情况下,我将选择什么来实现缓存


What will be my choices for implementing cache in this case?

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

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

  1. 每次读取数据(当前)(非常慢)
  2. 在Memcached中以单独的密钥存储来自每个用户的更新。然后,当页面被加载时,从Memcached中获取数据,排序,修剪,或者我想用它做的任何事情。
  3. 分别存储每个用户的feed。但这意味着,当用户发布更新时,他所有朋友的缓存都必须更新,从而造成额外的开销。

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

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

让您的已登录客户端为其所有朋友频道注册一个侦听器。如果有人在他的时间轴上添加了一些内容,检查是否有注册的听众。如果是,发布到这些客户端(使用queue, push,等等)。