0

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

  1. 我正在编写一个横幅交换系统。
  2. 有关横幅的信息存储在数据库中。
  3. 有不同的网站,具有不同的流量,加载一个 php 脚本,为这些横幅生成代码。(以便横幅显示在客户的网站上)
  4. 当第一次显示横幅时 - 它会与 memcache 一起缓存。
  5. 横幅具有缓存寿命,例如 1 小时。
  6. 每小时更新一次缓存。

我在此任务中看到的潜在问题出现在第 4 步和第 6 步。例如,如果我们有 100 个流量很大的站点,则脚本可能会同时运行多个实例。我怎么能保证当缓存过期时它会重新生成一次并且数据会完好无损?

4

1 回答 1

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 在集群环境中运行良好,您应该会发现设置类似的东西并不难,所以这应该很容易扩展到您需要的任何东西。

于 2011-04-14T00:16:41.337 回答