我看到一些使用 AWS RDS 数据库的 Laravel 代码出错。该代码将一条记录写入数据库,然后立即进行搜索以使用主键加载该记录,但没有得到任何结果。
如果我之后手动尝试,我会找到记录。如果我在代码中插入 1 秒的睡眠,它可以正常工作。
我已经尝试使用 Laravel 的读写主机单独设置。我也尝试将它们设置为同一台主机并且只使用一台主机。结果总是一样的。但是其他具有相同配置的环境没有错误。
RDS 中是否有选项需要更改才能在写入后立即可用。
错误是由于mySQL master-slave replication lag
.
一个常见的错误是使用 mySQL 集群,然后在写入后立即执行读取。
由于读取发生在其中一台从/读取主机上,而写入发生在主服务器上,因此在读取时不会复制数据。
有几种方法可以纠正错误:
sticky
database选项。注意:如果不小心仅用于您想要的用例,这可能会导致性能问题。从文档:该
sticky
选项是一个可选值,可用于允许立即读取在当前请求周期内已写入数据库的记录。如果sticky
启用该选项并且在当前请求周期内对数据库执行了“写入”操作,则任何进一步的“读取”操作都将使用“写入”连接。
最“不明显”的方法是不要在写入后立即执行读取。根据您的用例考虑是否可以避免这种情况。
其他方法:请参阅此SO 帖子
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句