首页
学习
活动
专区
工具
TVP
发布

如何用redis统计海量UV

前言 我们先思考一个常见的业务问题:如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模块,你会如何实现?...统计uv的常用方法以及优缺点 其实要是单纯的统计pv是比较好办的,直接用redis的incr就行,但是uv的话,它要去重,同一个用户一天之内的多次访问请求只能计数一次。...但是,如果你的页面访问量非常大,比如一个爆款页面几千万的 UV,你需要一个很大的 set 集合来统计,这就非常浪费空间。如果这样的页面很多,那所需要的存储空间是惊人的。...hash hash和set在处理uv的问题上其实类似,把用户id作为hash的key的确可以去重,但是如果访问量大了之后也会消耗很大的内存空间 bitmap bitmap同样是一种可以统计基数的方法,可以理解为用...HyperLogLog 提供不精确的去重计数方案,虽然不精确但是也不是非常不精确,标准误差是 0.81%,这样的精确度已经可以满足上面的 UV 统计需求了。

1K40
您找到你想要的搜索结果了吗?
是的
没有找到

HyperLogLog统计网站UV 太丝滑

网站的UV定义网站的UV(Unique Visitor)是指独立访客的数量,用于衡量网站的访问量和流量。在网站统计中,通常使用UV来度量网站的独立访客数量。...如何统计无论cookie的方式,还是ip地址的方式去做统计,最重要的一点,就是要去重,一个集合里面不能有重复元素。...当你需要统计 UV 时,可以直接用 SCARD 命令,这个命令会返回一个集合中的元素个数。...我大概计算下:1千万用户访问page1如果使用用户id统计UV,一个id,平均占用5个字节10000000*5/1024/1024=47Mb如果使用ip统计UV,用字符串来储存每个 IPv4 地址最多需要耗费...HLL 具有以下几个特点:能够使用极少的内存来统计巨量的数据,它只需要 12K 空间就能统计 2^64 的数据。统计存在一定的误差,误差率整体较低,标准误差为 0.81%。

13210

three.js UV映射简述

今天郭先生来说一说uv映射,什么是uv映射?uv映射就是将二维的贴图映射到对象的一个面(或者多个面)上。说到这个问题,我们就不得不了解一下Geometry的点、面和uv的结构。...再说说uv映射,一个纹理图的原点在其左下方,坐标为(0,0),右下方为(1,0),左上方为(0,1),右上方为(1,1) image.png 未标题1.png 在Geometry中,faceVertexUvs...决定了uv映射的关系,如下如就是uv映射关系 image.png 捕获555555555.PNG 我们可以看出第一个三角面对应一个二维点数组new THREE.Vector2(0,1), new THREE.Vector2...var mate = new THREE.MeshBasicMaterial({map: new THREE.TextureLoader().load('/static/images/animal/an-uv.png...这里faceVertexUvs数组的第一维度是材质的索引,第二维度才是面的uv贴图映射关系,由于只有一个材质,所以这里的索引都是0。 这节说了一下uv的使用,下一节说一说关于它的小应用。

5.3K30

基于 Redis HyperLogLog 实现用户 UV 统计功能

引子 在通过 Redis 实现全站访问计数器中,学院君已经给大家演示了统计用户 PV 的实现思路,今天我们来看看如何实现用户 UV统计。...通过 SET 结构实现 UV 统计 基于去重功能,很多同学可能会联想到可以通过 Redis 的 SET 结构实现用户 UV 统计 —— 将统计指标+时间后缀作为键名,然后每当有用户访问时,将对应的用户标识通过...但是如果放到大型站点就不合适了,比如我们要统计上百万不同页面的用户 UV,用户量级在千万级甚至亿级,为了维护每个页面用户 UV 统计的 SET 结构,需要耗费大量的 Redis 存储空间,对于爆款页面,...来实现这样的 UV 统计功能。...实现全站 UV 统计中间件 接下来,和 Laravel 全站 PV 统计功能一样,我们基于 HyperLogLog 来实现一个全站 UV 统计中间件。

1K10

Oceanus 在腾讯微视数据的实践-统计某时间段内的uv、pv

业务背景: 为了实时监控微视端内app启动以及启动方式的情况,需要实时的统计每10分钟及每小时pv、uv。这里pv,每收到一条启动日志即+1,uv则需要依据启动的唯一标识qimei来做去重处理。...实现介绍: 实现pv、uv统计主要微视数据尝试过两种方式,一是窗口方式:主要是使用flink window+valueState,统计的结果可以直接输出;另外一种是使用redis,借用外部存储系统redis...窗口方式:使用窗口的方式,来计算pv、uv,即根据需求的时间段,来设定窗口的大小,例如需要计算10分钟内的pv、uv则需要开一个10分钟时长的统计窗口,对于pv不需要做去重处理,对于uv,需要借用flink...借用redis:使用redis方式来计算某时间段的pv、uv,如果是需要计算任意时间段内,可以使用redis的zset结构或者是通过hash分片,都是把统计的时间窗口放在redis的key上,计算uv,...借用redis来计算pv、uv,代码实现较简单,统计的数据,可以按照实际需要直接保存在redis中,由于构造存储统计数据的key是按照日志上报的时间,该方式具有更长的延迟数据处理能力。

1.7K70

Fluid -24- Leancloud 失效解决方案 —— 自建站点 PV UV 统计

2022年8月,LeanCloud 国际版不再为来自中国大陆的 IP 提供服务,基于 LeanCloud 的站点统计因此失效,本文基于 Umami 的统计信息自建 PV UV 统计后台,解决上述问题。...(PV) 统计 全站用户访问量 (UV统计 当前在线用户数统计 文章页面浏览量统计 文章用户访问量统计 原理思路 计数工具 讲道理只要有看门的 callback 将用户信息发送到后台进行统计并想办法显示统计数据即可...github 上有很多工程可以使用 我在之前搭建了基于 Google 统计的工具 Umami 正好 Umami 有方便的 API 接口 可以调用 于是决定基于这款工具开发 PV UV 统计 LeanCloud...= res_dict['uniques']['value'] + self.conter_dict['site-uv'] return pv, uv def js_str(self...我选择在 Fluid 主题配置文件中加入该部分前端代码 打开 Hexo/_config.fluid.yml 文件 关闭原始 PV、UV 统计 # 展示网站的 PV、UV 统计数 # Display

83120

网格UV展开

原文链接 UV展开是什么 参数曲面的参数域变量一般用UV字母来表达,比如参数曲面F(u,v)。所以一般叫的三维曲面本质上是二维的,它所嵌入的空间是三维的。...另一种是展开算法中的约束产生的扭曲,比如固定边界的UV展开。一种直观的观察展开扭曲程度的方式是,把一张棋盘格图片贴到网格上,棋盘格越均匀,UV展开扭曲越小。...单连通圆盘拓扑的UV展开:如图1情况所示。这种情况下,顶点和纹理坐标是一一对应的,一个顶点可以存一个纹理坐标。一般这类的UV展开,都是使用的顶点纹理坐标的概念。 任意网格的UV展开:如图2情况所示。...如下图所示,网格UV展开到平面后,把网格对应的贴图填充到UV坐标域,就得到了右边的纹理图。网格在渲染的时候,每个三角片离散化后,每个离散点会根据UV坐标值去纹理图里拾取颜色。...拾取的方法,可以是UV坐标值最近点颜色,也可以根据UV坐标值的相邻四个像素做双线性差值。 有兴趣的读者,欢迎参考视频版本

2.8K30

three.js 利用uv和ThreeBSP制作一个快递柜

那我我们就是用ThreeBSP和uv贴图的知识来制作一个定制化的快递柜,先上图,在线案例请点击你的专属快递柜。...主角是一个JSON 这样一个快递柜的核心是JSON数据的创建,有了jSON数据,我们就可以通过循环遍历出柜子,柜门和uv映射关系。那面下面来看看我们的JSON数据(部分代码)。...柜子的统一贴图 将一张图作为贴图,贴到所有的mesh上,如最上面图的效果,因为上节课已经大致的说了关于uv的一点知识。...经过换算x1是纹理x坐标的最小值,x2是纹理x坐标的最大值,y1是纹理y坐标的最小值,y2是纹理y坐标的最大值,最后设置数组索引为8和9小三角面的uv映射(因为我们要设置的面为长方体的左面,就是8和9控制的面

1.3K10

UnityShader实例06:UV动画

UV动画 UV动画,顾名思义,就是针对UV做的动画。在游戏中,一些动态水面,飞流直下的瀑布,流动的岩浆,跳动的火焰等等,很多都是通过操作UV做的动画。...在unity中我可以实用挂载脚本或者直接针对UV key动画帧做动画操作,而在本文中将通过shader编写实现三个比较常见的UV动画方式: 1.UV位移动画 2.UV序列帧动画 3.UV旋转动画...UV旋转动画 UV旋转动画在游戏开发中用得相对比较少,特效师一般会采用其他方式代替,这里将用shader实现一个UV旋转的动画。UV旋转实际上一个2D旋转,有关2D旋转的理论在这里。...(cos(_Speed*_Time.x),sin(_Speed*_Time.x)); //获得旋转后的uv坐标值 uv=float2((uv.x*rotate.x-uv.y*rotate.y)...=float2((uv.x*rotate.x-uv.y*rotate.y),(uv.x*rotate.y+uv.y*rotate.x)); uv+=0.5;

1.1K10

UV、PV、TPS、QPS、DAU

例如,访问一个 Index 页面会请求服务器 3 次,包括一次 html,一次 css,一次 js,那么访问这一个页面就会产生一个“T”,产生三个“Q”。...如果用户不断更换 IP,则有可能被多次统计UV(Unique Visitor) 指独立访客访问数,统计1天内访问某站点的用户数(以 cookie 为依据),一台电脑终端为一个访客。...如果更换了 IP 后但不清除 cookies,再访问相同网站,该网站的统计UV 数是不变的。...DAU通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户),与UV概念相似。...根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l 统计访问URL统计PV awk '{print $7}' access.log

1.7K31
领券