redis大数据统计之hyperloglog,GEO,Bitmap

本文介绍了亿级系统中常见的四种统计方法(聚合、排序、二值和基数),重点讲解了HyperLogLog在去重和PV/UV统计中的实践,以及GEO用于LBS应用的地理信息处理,同时对比了MySQL和Redis在这些场景下的优缺点,展示了如何使用Bitmap优化日活统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、亿级系统常见的四中统计

1、聚合统计

2、排序统计

3、二值统计

4、基数统计

二、hyperloglog

去重的方式有哪些?

hyperloglog实战演示

1、技术选型

2、代码演示 

三、GEO

GEO实战演示

四、Bitmap


一、亿级系统常见的四中统计

1、聚合统计

聚合统计:统计多个集合元素的聚合结果,交并差集和聚合函数的应用。用于推广社交

2、排序统计

排序统计:在面对需要展示最新列表、排行榜等场景时,如果数据更新频繁或者需要分页显示,建议使用zset。

3、二值统计

二值统计:用于签到打卡,使用bitmap

4、基数统计

基数统计:指统计一个集合中不重复的元素个数,使用hyperloglog

统计名词

UV:Unique Visitor 独立访客,一般伟客户端IP(需要去重)

PV:Page View 页面浏览量(不去重)

DAU:Daily Active User 日活跃用户,登录或者使用了某个产品的用户数(去除重复登录的用户)

常用于反映网站、互联网应用或者网络游戏的运营情况。

MAU:Monthly Active User 月活跃用户

二、hyperloglog

需求分析

统计单日一个页面的访问量(PV),单次访问就算一次。

统计单日一个页面的用户访问量(UV),即按照用户为维度计算,单个用户一天内多次访问也只算一次。

多个key的合并统计,某个门户网站的所有模块的PV聚合统计就是整个网站的总PV。

去重的方式有哪些?

1、HashSet

2、bitmap

bitmap是通过用位bit数组来表示各元素是否出现,每个元素对应一位,所需的总内存为N个bit。
基数计数则将每一个元素对应到bit数组中的其中一位,比如bit数组010010101(按照从零开始下标,有的就是1、4、6、8)。新进入的元素只需要将已经有的bit数组和新加入的元素进行按位或计算就行。这个方式能大大减少内存占用且位操作迅速。但是对于亿级统计不太合适。

3、hyperloglog

只是进行不重复的基数统计,不是集合也不保存数据,只记录数量而不是具体内容。Hyperloglog

提供不精确的去重计数方案,牺牲准确率来换取空间,误差仅仅只是0.81%左右。

hyperloglog实战演示

示例:淘宝网站首页亿级UV的Redis统计方案

1、UV的统计需要去重,一个用户一天内的多次访问只能算作一次。
2、淘宝、天猫首页的UV,平均每天是1~1.5个亿左右。
3、每天存1.5个亿的IP,访问者来了后先去查是否存在,不存在加入。

1、技术选型

使用mysql

        mysql扛不住稍微大一点的并发,而且都需要存入mysql中,导致mysql的检索也会变慢

使用redis的hash结构存储

        按照ipv4的结构来说明,一个ip最多15个字节(ip=“192.168.238.1xx”),某一天 1.5亿*15个字节 = 2G,一个月60G,内存直接没了,加内存条都没用

使用hyperloglog

        在Redis里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2的64次方个不同元素的基数。

2、代码演示 

HypeLogLogService

public interface HypeLogLogService {

    public long uv();
}

HyperLogLogServiceImpl

import com.xfcy.service.HypeLogLogService;


import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.Random;
import java.util.concurrent.TimeUnit;

&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值