我已经彻底分析了WP的缓存、它的功能和它的功能,虽然它的设计很简单,但它是有效的:一个对象,您不断添加可能在其他地方使用的数据,这样您就不会访问数据库。
好吧,但是PHP是无状态的。当谈到动态实体时,它在会话之间什么都不记得,因此,每一个新的请求都意味着一个新的生命周期。
它显然不在数据库中。拥有“全局共享”缓存也可能没有意义,因为每个用户的变量可能不同,因此,如果一个用户以某种方式请求帖子,另一个用户很可能会以另一种方式(过滤器)请求帖子,WordPress doesn\'t do it - it\'s not in the database either as a transient / option.
那么,这是怎么发生的呢?
考虑到它是无状态的,除非同一个查询运行两次,否则缓存不是没有用处吗?因为它在会话关闭时终止,所以之前运行的查询将无法检索其结果。
Edit:
我明白什么
__destruct
但在这种情况下,缓存既不会保存在会话变量中,也不会保存在用户的缓存中,也不会。。。没有,只是
returns True
.
最合适的回答,由SO网友:Tom J Nowell 整理而成
简单的回答是:it doesn\'t
这并不意味着它不能持久化,也不意味着它不能提高性能。
尽管没有持久性,但性能还是得到了提高,假设我们获取了5篇文章,并且在每篇文章上我们都检索到了各种post meta。你可能会认为get_post_meta
导致额外的DB查询,但您可能错了。WP提前获取所有post元,并通过WP缓存进行存储。当模板获取这些值时,它将从WP缓存中获取,以避免多个数据库查询。
同样,如果您使用各种函数来检索术语、帖子等,它们会缓存在WP缓存中。通过这种方式,可以使用WP Cache来确保只从数据库中提取一次数据,并作为一种优化,即使WP Cache在请求结束时丢失。您将看到许多中间开发人员试图实现这一点以避免DB查询,而WP在幕后已经做到了这一点
使其持久化,您可以使用拖放文件来提供使用持久数据存储的WP缓存实现。例如,我使用Memcached dropin,其中有几个实现。这通常是使用在内存中存储数据的无密钥库SQL数据库来完成的。
对于每个用户的数据,它不会持久化,或者如果是持久化的,则会使用命名空间,或者在键中包含用户ID,以便不会发生冲突。
请记住,这将需要第三方软件,无论是Memcache、Redis等,大多数主机都不会提供。
话虽如此,the performance gains of a persistent object cache can be immense
瞬态是唯一持续存在的部分,它们存储在选项表中。然而,如果存在持久对象缓存,它们也会缓存在WP缓存中,从而提高速度。
整页缓存WP不进行页面缓存,但可以通过插件添加。然而,这些插件如何做到这一点取决于插件,有许多不同的方法和实现,您需要参考插件文档和支持途径