使用SET_TRANSPONT()函数会导致MySQL问题吗?

时间:2020-04-14 作者:Ivijan Stefan Stipić

作为一个插件作者,我必须考虑很多事情。我的一个插件使用一个临时PHP会话将通过其API接收的JSON数据保存为数组类型。

因为PHP会话有其局限性,有时会导致内存问题,所以我决定使用工作正常的瞬态函数。

如果一个站点每天访问量超过1000次,则每个访问者通过临时功能在数据库中有一个临时记录,该功能每60分钟或更短时间过期一次(取决于用户如何确定)。

瞬态函数使用wp_options 默认已存档的表option_id bigint(20)。

当我到达最后一个时会发生什么option_id?

WordPress是否有要重置的安全触发器option_id 还是有其他规则?

还是我不用担心?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

使用set\\u transient()函数是否会导致MySQL问题?

No, 虽然如果您经常使用它,以至于MySQL服务器的磁盘空间不足,那么是的,它可能会导致问题。然而,通过检查磁盘空间,您就会知道情况是这样的,如果您能够做到这一点,那么我会认为您对瞬态的使用有很大的问题。

不过,任何表格都是如此,这不是一个瞬态问题,而是存储了太多东西,显然出了问题。就像一个大驱动器被一个日志填满,或者一个程序进入一个无限循环。

当我到达最后一个option\\u id时会发生什么?

You will not reach the last option ID.

我从未见过一个站点遇到这种情况,要突破BIGINT 20,您需要2到64个选项,或者18446744073709552000个选项。这是18446744073709百万期权,或18446744073万亿期权,或18446744四万亿期权。

在这成为问题之前,您的服务器将很长时间内耗尽内存和磁盘空间。So this isn\'t worth worrying about. 请记住,如果您需要很多瞬态,并且有数百个甚至数千个瞬态,这表明代码中存在缩放问题。

即使我们说每天将有40万个条目添加到选项表中,而且我们有一台具有无限存储CPU和RAM的机器,但要达到上限至少还需要126万亿年。宇宙的热死亡可能会比这更早发生。

WordPress是否有一些安全触发器来重置option\\u id或有其他规则?

No, it isn\'t necessary, 或者是一个安全问题,我怀疑任何一个WP网站都不会接近使用价值的一半。这是MySQL/MariaDB必须处理的事情。

还是我不用担心?

Correct! 选项ID字段完全是一个骗人的东西。这不值得你花时间和精力。别担心。

作为一个插件作者,我必须考虑很多事情。One of my plugins uses a temporarily PHP session 以数组类型保存通过其API接收的JSON数据。

这是一个问题。On most WP hosts PHP sessions just do not work. PHP会话与绝大多数基于插件和基于服务器的缓存机制不兼容。PHP会话也与WordPress如何使用Cookie管理自己的会话背道而驰。此外,PHP会话必须存储在内存中,而且由于它们的工作方式,它很难随着流量的增加而扩展。

这也是不安全的,用户可以干预PHP会话来切换它们。你调查其他选择是正确的。

相关推荐

Using Transients

我对短暂的概念是陌生的。但我不确定使用它的有效方法。我真的很喜欢它,因为它删除了我的重复查询。我已设置set_transient( \'pgggo_acf_list_transient\', $pgggo_qry, 12 * 7000 ); 是不是太高了</如果WordPress站点上有管理更新,并且修改了设置为瞬态的查询,该怎么办。它会自动更新吗</我应该在哪里不使用transient