首页 > php文章浏览量用什么做好呢

php文章浏览量用什么做好呢

文章浏览量用什么做好呢,网上找了些方法感觉都不太好,按session,按cookie,按点击次数都有,想问问大神们怎么设计更合理,用的php


谢谢大家的热心回答!


文章ID 为key
比如$key = article:1
然后写入redis
定期跑脚本 落地到mysql


如果对数据要求不高,那就cookie 同一个浏览器算1次,然后数据存储到redis


刷新一次更新一次很容易被恶意刷量,数据库也容易被攻击.
可以考虑同一个IP在一段时间内(比如一天)的访问只算一次.
也就是更新文章阅读次数前,先查找当前用户IP是否在1天内访问过.
如果没有,则执行UPDATE更新阅读数加1,并且INSERT插入一条"文章ID+IP+时间"记录.
写的时候可以先写到Redis中,然后每隔一段时间后获取互斥锁写入MySQL.
$redis->set('post_views_1024', $redis->get('post_views_1024')+1);
如果文章阅读次数最后更新时间超过600秒,则写入MySQL:

if( (time()-600) > $redis->get('post_views_last_update_time_1024') ) {
    $key = 'lock'; //锁
    $random = md5( uniqid(getmypid().'_'.mt_rand().'_', true) ); //随机值
    $ttl = 10; //nx表示not exists.ex表示expire.ttl表示超时时间time to live,单位是秒.
    if( $redis->set($key, $random, ['nx', 'ex' => $ttl]) ) { //加锁
        //写入MySQL
        $mysqli->query('UPDATE posts SET views = '.$redis->get('post_views_1024').' WHERE id = 1024');
        if( $mysqli->affected_rows === 1 ) {
            $redis->set('post_views_last_update_time_1024', time());
        }
        //加入随机值判断是为了避免删除到其他操作的锁
        if($redis->get($key) == $random) {
            $redis->del($key);
        }
    }
}

浏览量最普遍的计算方式就是文章的打开次数,基本上涉及到浏览量的文章刷新页面浏览量就会增加1


可以考虑用脚步解析ngnix或httpd的日志文件

【热门文章】
【热门文章】