0

假设我们有一个向用户呈现连续数据的应用程序。例如博客——我们提供博客条目列表,这个列表分为页面——所以我们最终得到 /page1、/page2 等。

第一页显然是最常被请求的,但页数越高,请求的频率就越低。

如果我们为我们的应用程序实现缓存,我们有两个选择:

  • 每个新条目后更新每个页面的缓存

  • 当请求页面时,PHP 正在寻找缓存版本;如果存在,则返回,否则创建缓存,并将到期日期设置为,比如说,一个小时

第一个解决方案对我来说似乎真的很浪费资源。第二个创造了危险场景的可能性:

如果用户请求页面 x 然后 (x+1),其中页面 x 被缓存而页面 (x+1) 没有被缓存,会发生什么?如果页面 x 的缓存已过时,则在页面 (x+1) 上,用户将看到相同的内容。或者更糟糕的是,如果用户从 x 页转到 (x-1) 页怎么办?他会错过一些条目!

如何实现缓存来避免这个问题?

4

1 回答 1

0

通常最好按需缓存,而不是急切地缓存,除非您可以确保在那里完成的工作不会被浪费。

通常,您使用像 Memcached 这样的后备存储来保存您的瞬态数据。这可以使用“生存时间”(TTL)进行配置,这将自动使过时或未使用的任何内容过期。

通常,您将页面的一大块缓存到一个字符串中,然后使用某种识别键将其保存。在您的情况下,页面 URL 或参数的某些子集可能足够独特。请记住,如果用户会话对本节的内容有影响,那么与此相关的内容,例如也user_id必须是缓存键的一部分。

于 2012-10-30T18:13:15.980 回答