【发布时间】:2013-11-25 20:33:20
【问题描述】:
我已经在网上搜索了很长时间,但找不到任何缓存系统可以让我将多个标签添加到缓存中以便能够在数据库更新时将其删除,有没有人知道是否有什么这样的存在吗?
让我告诉你更多关于我想做的事情的细节。我有一个 PHP 网站,它在 MySQL 数据库中执行非常繁重的查询(要显示的某些页面超过 4000 个查询)。所以想法是缓存这些查询以减轻数据库的使用。另一方面,我需要在数据库更新时尽快更新这些信息。
范围仅明确需要更新的缓存,而不是一次清空所有缓存,因为一行中的细微变化仅影响一页。有没有办法用标签解决这个问题?
我已经看过 Fastcached 和 BrennoCache 但只允许 1 个标签……
[编辑]: 我已经完成了使用 FastCache、使用 TTL 并使用命名系统标记所有缓存元素以清空我可能需要清空的任何缓存。缓存也被应用于可能的最小信息部分,这意味着缓存的音调,但信息缓存非常少。这意味着更容易清空正确的位。通过这种方式,我们能够将一页的 4233 个查询增加到 17 个。
【问题讨论】:
-
MySQL 已经使用了自己的缓存:dev.mysql.com/doc/refman/5.1/en/query-cache.html。这也可以回答你的问题:stackoverflow.com/questions/2173201/…
-
除了如果确实需要 4000 次查询来呈现单个页面,您可能需要重新审视您的设计,大多数缓存系统都允许您控制缓存中对象的 TTL,以及提供从缓存中驱逐项目的方法。不幸的是,如果不了解更多有关应用程序行为的信息(单个缓存元素的大小,整体缓存的预期大小,缓存中数据的基数,预期什么),我们无法真正推荐任何东西缓存中项目的访问率,从缓存中实现的请求百分比的期望目标等
-
我也认为如果有超过 4000 个查询来构建一个页面,数据库或收集其中信息的方式存在一些设计问题。不幸的是,我只在最后一条直线上被要求在项目中寻求帮助,并且不能要求那种修订。关于缓存信息,我只能说我们正在讨论要缓存的 12,000 个不同的查询,每个查询应该小于 10kb。表之间有许多继承链接,所有内容的组合方式是使用循环......