前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Redis实现页面访问统计

使用Redis实现页面访问统计

原创
作者头像
Mandy的名字被占用了
修改2021-03-29 10:10:06
2.2K0
修改2021-03-29 10:10:06
举报

文章简介

该文将从Redis的角度来总结几种页面访问统计,这里的页面统计是针对某一个具体的页面进行每天的数量统计,后面文章内容涉及到的page_id指的就是页面的独立ID,每一个页面的ID都是不重复的。演示代码使用Laravel5.8版本实现。具体代码可以参考https://gitee.com/bruce_qiq/laravel-design.git

具体实现

Snipaste_2021-03-28_19-21-44.png
Snipaste_2021-03-28_19-21-44.png

页面总访问数量

页面总访问数量,统计了每个页面的总访问数量,不排除重复用户重复访问的情况,只要页面被访问就需要统计。

主要的实现思路是,给每一个页面划分一个ID,叫做page_id。我们使用字符串类型进行数量统计。

代码语言:txt
复制
// 1. 实现某个页面访问统计
// url:$http/api/redis/demo1?page_id=1
public function demo1()
{
    $pageId = $this->request['page_id'];
    echo Redis::connection()->incrby('page:number:' . date('Y-m-d') . ':' . $pageId, 1);
}

页面独立访问用户

页面独立访问用户,是针对某个具体的用户来进行数据统计。例如,有一个页面的page_id是1,此时用户的ID也是1,这时候就需要对page_id为1的数据进行缓存,并且将用户ID为1的数据添加到对应的缓存中。

下面使用set、bitmap、hyperLogLog来实现。

  1. set实现// 2. 实现某个页面独立用户访问统计(使用set实现) // url:$http/api/redis/demo2?page_id=1&user_id=1 public function demo2() { $pageId = $this->request'page_id'; $userId = $this->request'user_id'; Redis::connection()->sadd('page:number:set:' . date('Y-m-d') . ':' . $pageId, $userId); echo Redis::connection()->smembers('page:number:set:' . date('Y-m-d') . ':' . $pageId); }// 3. 实现某个页面独立用户访问统计(使用bitmap实现) // url:$http/api/redis/demo3?page_id=1&user_id=1 public function demo3() { $pageId = $this->request'page_id'; $userId = $this->request'user_id'; Redis::connection()->setbit('page:number:bitmap:' . date('Y-m-d') . ':' . $pageId, $userId, 1); echo Redis::connection()->bitcount('page:number:bitmap:' . date('Y-m-d') . ':' . $pageId); }// 4. 实现某个页面独立访问用户统计(使用hyperLogLog实现) // url:$http/api/redis/demo4?page_id=1&user_id=1 public function demo4() { $pageId = $this->request'page_id'; $userId = $this->request'user_id'; Redis::connection()->pfadd('page:number:perf:' . date('Y-m-d') . ':' . $pageId, $userId); echo Redis::connection()->pfcount('page:number:perf:' . date('Y-m-d') . ':' . $pageId); }
  2. bitmap实现
  3. hyperlog实现
  4. 使用set进行统计,可以将某一个具体的页面和对应的用户ID给统计到缓存中,并且set是去重的,因此能够保证数据的准确性。同时也可以针对某一个具体的页面或某一个具体的用户进行访问统计,还可以针对访问的记录,做用户留存情况、访问情况分析。
  5. 使用bitmap实现是一种弄节省内存的方式,底层在存储时,采用二进制的格式,只会存储0或者1。只要访问过就设置为1。既可以统计出具体的总数据,也可以根据offset统计到某个用户的访问记录,还可以做交集、差集等计算。
  6. 使用hyperLogLog方式进行统计,其实也是一种节省内存的方式。不过该方式存在一定的误差,如果对于数据准确性高的情况,不推荐使用。并且该方式只适合总数统计,不适合具体的数据查询。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章简介
  • 具体实现
    • 页面总访问数量
      • 页面独立访问用户
      相关产品与服务
      云数据库 Redis
      腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com