gpt4 book ai didi

php - MySQL 和 PHP 中的计时问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:34 24 4
gpt4 key购买 nike

我们想跟踪一个页面加载的页面数,所以我有这个方法来做到这一点:

function track_views($postID) {
$count_key = 'post_views';
$count = get_post_meta( $postID, $count_key, true );
if($count == '') {
delete_post_meta( $postID, $count_key );
add_post_meta( $postID, $count_key, '1' );
} else {
$count++;
update_post_meta( $postID, $count_key, $count );
}
}

我想知道的是,这可能会错过观看次数吗?如果两个用户同时加载页面,或者如果流量很高,获取字段、更新它并重新插入它的时间太少,是否会导致此计数不是 100% 准确?

例如:用户 1 加载页面 - 页面计数为 4,同时将 var 更新为 5,用户 2 加载并获得页面计数 4。将其更新为 5 并重新插入。

^它是这样工作的吗?或者时间真的不会有太大的不同吗?

我们真的不太关心页面加载的次数,所以我们不打算用一个表来填充每次加载的记录(每次加载都插入一条新记录),但我们想知道如果这会对其他页面加载产生竞争问题……和/或是否会产生冲突。

最佳答案

是的,您写的代码存在竞争条件是正确的。

在这种情况下,您通常会做的是直接在数据库中自动更新 View 计数:

UPDATE wp_postmeta
SET meta_value = meta_value + 1
WHERE post_id = $postID AND meta_key = 'post_views';

然后如果您确实需要该值(例如将其显示在页面上),您将从数据库中检索新值。

以这种方式完成后,数据库将确保更新是原子的,如果您在请求期间实际上不需要查看计数,则可以少进行一次查询(以获取数据)。

关于php - MySQL 和 PHP 中的计时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34726496/

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