PHP Memcache潜在的问题?

时间:2011-04-13 23:45:29

标签: php postgresql memcached simultaneous

我很可能会使用MemCache来缓存一些数据库结果。 因为我从来没有写过和做过缓存,所以我认为问问那些已经完成缓存的人是个好主意。我正在编写的系统可能在某些时候运行脚本并发。这就是我打算做的事情:

  1. 我正在写一个横幅交换系统。
  2. 有关横幅的信息存储在数据库中。
  3. 有不同的网站,有不同的流量,加载一个PHP脚本,将为这些横幅生成代码。 (以便横幅显示在客户的网站上)
  4. 当第一次显示横幅时 - 它会被memcache缓存。
  5. 横幅的缓存续航时间为1小时。
  6. 每隔一小时更新一次缓存。
  7. 我在此任务中看到的潜在问题是步骤4和6。 如果我们有100个流量很大的站点,那么脚本可能会同时运行多个实例。我怎么能保证当缓存过期时它会重新生成一次并且数据将完整无缺?

1 个答案:

答案 0 :(得分:2)

  

我怎么能保证当缓存过期时它会重新生成一次并且数据将完好无损?

我采用的缓存方法是,由于缺乏一个更好的词,一个“懒惰”的实现。也就是说,在你检索它之前你不会缓存一些东西,希望有人再次需要它。这是该算法的伪代码:

// returns false if there is no value or the value is expired
result = cache_check(key)

if (!result)
{
    result = fetch_from_db()

    // set it for next time, until it expires anyway
    cache_set(key, result, expiry)
}

这非常适合我们想要使用的内容,只要您智能地使用缓存并了解并非所有信息都相同。例如,在假设的用户评论系统中,您不需要 到期时间,因为只要新用户在文章上发表评论,您就可以简单地使缓存无效,因此下次加载评论时,他们被收回了。但是,一些信息(天气数据会浮现在脑海中)会产生手动到期时间,因为您不依赖用户输入来更新数据。

为了它的价值,memcache在集群环境中运行良好,你应该发现设置类似的东西并不难,所以这应该很容易扩展到你需要的任何东西。