gpt4 book ai didi

php - 为什么 Google Bots 的 ip 在我的数据库中保存了多次?

转载 作者:行者123 更新时间:2023-11-29 01:18:47 25 4
gpt4 key购买 nike

我的 mysql 数据库中发生了一些非常奇怪的事情。我有一个脚本,它获取用户的 ip 地址并将其保存在数据库中 5 分钟。通过这样做,我可以显示当前在我的网站上活跃的人数。该脚本还检查 ip 地址是否已在数据库中准备好。现在发生的事情是总是有一个带有特定 IP 地址的谷歌机器人。并且这个 ip 地址在我的数据库中保存了大约 40 次,所有条目都具有完全相同的时间戳。尽管我的脚本实际上在将 IP 地址写入数据库之前检查它是否已经存在,但这怎么可能呢?

谢谢,海贼王

最佳答案

所以你有这样的东西:

if(!already_exists($ip))
insert_into_db($ip)

这是 race condition 的一个简洁示例,因为您的 PHP 脚本将并行运行,每个请求一个。

想象一下,当您有 40 个请求大致同时执行第一个 if 时会发生什么,在数据库回复到来之前......他们都认为 IP 地址不存在,并且他们插入

你可以使用 ON DUPLICATE KEY UPDATE查询来解决这个问题。

INSERT INTO visitors values (NOW(),$ip) ON DUPLICATE KEY UPDATE ts = NOW();

如果记录不存在,这将插入记录,如果存在,它将更新 ts 列。

你需要一个 UNIQUE使用 IP 地址在列上建立索引以使其工作。

关于php - 为什么 Google Bots 的 ip 在我的数据库中保存了多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com