我正在开发一个插件,它可以扫描网站的内容,使用字典文件匹配单词。现在,当扫描整个站点时,它会将一系列功能安排为立即运行的事件,以便可以在后台运行。
现在,每个函数(每个页面内容、帖子内容、媒体文件等都有一个)都在处理加载字典文件的操作,但我们正在尝试找到一种方法,以便只需将文件加载到内存中一次,所有计划的扫描事件都可以使用它。
我们尝试将存储在数组中的字典文件作为事件触发的函数的参数传递,但它似乎在数据库中为每个事件保存一次,并且会使服务器的内存超载。
我在PHP中遇到了共享内存扩展的想法,但我们不能保证我们能够实现这一点,如果可能的话,我们会选择另一种解决方案。
WordPress中是否有任何方法可以做到这一点,或者我们是否必须为每个函数将文件加载到数组中一次?
SO网友:Tom J Nowell
在字面意义上?不,PHP实例是独立的,否则我们将讨论多线程
您面临的问题比WP更为根本,将其保存在内存中的唯一方法是通过对象缓存,这将使您能够轻松获取数据结构的副本。但它不会节省内存,访问数据会创建一个副本,如果您的机器没有磁盘IO限制,那么性能增益将微乎其微
基本上,您可以使用WP Cache将数据存储在对象缓存中,然后确保Redis/Memcached/etc有一个对象缓存dropin
如果不使用WP缓存功能,则会将数据保留在内存中,直到请求结束。使用基于文件的缓存插件不会给您带来任何好处,您需要在服务器级别安装Redis/Memcached/etc