如何使用php Memcached缓存新用户帖子?

时间:2013-08-02 13:24:56

标签: php memcached

我有像facebook或SocialEngine这样的社交引擎系统......用户主页显示了他们的朋友帖子及其活动。我想缓存这个主页以减少mysql服务器加载ex用户主页存在10 post所以我们有这样的场景:

if cached is exist 

   show homepage cached // fo 10  new post

else
  homepage db query // fetch 10 new post
  cache homepage to memcache // we cache it for 5 minitues 

我有一个问题:  一位用户朋友写了一篇新帖子,所以当用户刷新主页时他看不到朋友的新帖子直到5分钟,有没有办法在主页更新时自动更新缓存??

2 个答案:

答案 0 :(得分:0)

是的,有一种方法可以自动更新缓存。实际上,这是一个非常常见的问题,称为缓存失效

您可以通过Memcached::delete()方法使用基本缓存失效。这将导致在下次有人访问(未)缓存页面时重新生成缓存。

或者您可以使用直写式缓存,这意味着您可以执行更新页面所需的操作,然后将新结果保存到旧缓存键,就像访问页面时保存它一样。这种解决方案往往要复杂得多。

另外,请参阅kander的精彩评论。

答案 1 :(得分:0)

你有这种棘手的情况,我可以看到两种方法。

1)您为每个用户及其朋友帖子保留一个缓存条目(例如,在“User1”键下的Memcache条目,其中包含10个项目的数组,“User2”=>“post content”,“ User8“=>”发布内容“等,这将要求您在发布新帖子时更新所有用户朋友的memcache条目。

2)你为每个用户的帖子保留一个缓存条目(例如,在“用户1”键下的Memcache条目,其中包含用户最近10个帖子的数组,“postid”=>“post”内容“,”时间戳“,”内容“,这将要求您更新其最近10个帖子的用户个人缓存,但每当其中一个用户朋友加载主页时,该用户朋友将不得不查询他们所有的朋友缓存并将最近帖子的时间戳与当前时间戳进行比较。

我会使用解决方案2.