让我们想象一下,您是一个用PHP编写的流行CMS的创建者。许多人都在许多网站上使用它。现在让我们谈谈缓存技术。服务类中有一个函数(getItemByHandle
),可以从数据库的特定表中获取特定项。
关于整体表现,您愿意
这两种技术都只会为当前请求缓存它。数据库输出仅存储在PHP变量中。因此,不再需要像Key-Value-Store这样的缓存技术。
第一种技术将仅缓存已获取的项目。每个具有不同句柄的getItemByHandle(...)
调用都将导致新的数据库命中。
但是,第二种技术只会(按请求)一次访问数据库,但这也意味着来自数据库的流量更多,PHP的工作量也更多。因此,如果表中有成千上万的条目,它将为每个请求获取所有条目,但不会在同一请求内的进一步getItemByHandle(...)
调用中访问数据库。
我之所以问,是因为也许还有其他方面需要考虑,这里不再赘述。
答案 0 :(得分:0)
数据库查询较少,更好。
如果您可以检索到整个数据集,并且可以确定您的内存大小足够。所以第二个选择是最好的。
但是,如果您的数据集太大而无法将其存储在内存中,请对多个查询使用第一个选项。
答案 1 :(得分:0)
通常,PHP脚本在每次调用时都会重新开始。这是因为HTTP本质上是“无状态的”。这意味着不可能在页面之间的缓存。
有一些涉及“会话”变量的错误,这些变量在“用户”完成其页面时消失。
MySQL旨在(通常)完成所需的所有缓存。当然,可以将可怕的CMS查询写入数据库,从而使CMS变慢。我认为这是草率的代码,而不是缺少缓存。
如果您的数据集足够小,可以缓存所有内容,那么查询(没有缓存)可能足够快,以至于您无法测量速度差异。
如果数据集很大,您会发现过早的缓存非常愚蠢,并且尝试将失败。