【问题标题】:Best way of caching sorted data in PHP/MySQL在 PHP/MySQL 中缓存排序数据的最佳方式
【发布时间】:2012-10-30 18:05:58
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 最好的“关键”是使用查询并创建SQL的哈希,然后您可以保持约定。或您的案例中的网址

标签: php mysql sql caching


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 2010-09-05
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    相关资源
    最近更新 更多