我很可能会使用MemCache来缓存一些数据库结果。 因为我从来没有写过和做过缓存,所以我认为问问那些已经完成缓存的人是个好主意。我正在编写的系统可能在某些时候运行脚本并发。这就是我打算做的事情:
我在此任务中看到的潜在问题是步骤4和6。 如果我们有100个流量很大的站点,那么脚本可能会同时运行多个实例。我怎么能保证当缓存过期时它会重新生成一次并且数据将完整无缺?
答案 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在集群环境中运行良好,你应该发现设置类似的东西并不难,所以这应该很容易扩展到你需要的任何东西。