redis学习笔记(二) - redis的数据类型bitmap/hyperloglog/GEO

目录

为什么出现这3个类型

示例:

需求痛点

统计的类型有哪些-亿级系统中常见的四种统计

聚合统计

排序统计

二值统计

基数统计

Bitmap

是什么

能干嘛

根据需求

真实案例

签到领取京豆

需求说明:

传统方法,传统mysql方式

redis方法

说明:

基本命令

setbit

Getbit

Setbit和getbit案例说明

Bitmap的底层编码说明,get命令操作如何

Strlen-统计字节数占用多少

Bitcount

Bittop

Hyperloglog

名词

什么是UV

什么是PV

什么是DAU

什么是MAU

看需求

是什么

基数

基数统计

总结就是去重脱水后的真实数据

Hyperloglog如何做的?如何演化出来的?

去重统计的方式

结论

办法

原理说明

经典面试题

基本命令

案例实战:天猫网站首页亿级UV的redis统计方案

需求

方案:

GEO

简介

原理

难点

地理知识说明

查询

命令

命令实操

    如何获得某个地址的经纬度

    GEOADD添加经纬度坐标

    GEOPOS返回经纬度

    GEOHASH返回坐标的geohash表示

    GEODIST 两个位置之间距离

    GEORADIUS


为什么出现这3个类型

示例:

手机App中的每天的⽤⼾登录信息:1天对应1系列⽤⼾ID或移动设备ID;

电商⽹站上商品的⽤⼾评论列表:1个商品对应了1系列的评论;

⽤⼾在⼿机App上的签到打卡信息:1天对应1系列⽤⼾的签到记录;

应⽤⽹站上的⽹⻚访问信息:1个⽹⻚对应1系列的访问点击

面试问

记录对集合中的数据进行统计

在移动应用中,需要统计每天的新增用户数和第2天的留存用户数;

在电商网站的商品评论中,需要统计评论列表中的最新评论;

在签到打卡中,需要统计一个月内连续打卡的用户数;

在网页访问记录中,需要统计独立访客(UniqueVisitor,UV)量。

。。。。。。

需求痛点

数据量较大的收集+统计

需要 存的进+取得快+多统计

真正有价值的是统计。。。

统计的类型有哪些-亿级系统中常见的四种统计

聚合统计

  1. 统计多个集合元素的聚合结果,就是前面说过的交差并等集合统计
  2. 交并差集的聚合函数的应用

排序统计

  1. 抖音视频最新评论留言的场景,请你设计一个展现列表。考察你的数据结构和设计思路
  2. 设计案例和回答思路

以抖音vcr最新的留言评价为案例,所有评论需要两个功能,按照时间排序+分页显示

能够排序+分页显示的redis数据结构是什么合适?

  1. List

每个商品评论对应一个list集合,这个list包含了对这个商品的所有评论,而且会按照评论时间保存这些评论。

每来一个新评论就用LPUSH命令把他插入list的队头。

但是,如果在展示第二页之前,又产生了一条新评论,第2页的评论不一样了。

原因:list是通过元素在list中的位置来排序的,当有一个新元素插入时,原先的元素在list中就都后移了一位,原来在1的元素现在排在了第2位,当lrange读取时,就会读到旧数据。

  1. Zset
  2. 在面对需要展示最新列表、排行榜等场景时,如果数据更新频繁或者需要分页展示,建议使用zset

二值统计

集合元素的取值就只有0和1两种。

在钉钉上班签到打卡的场景中,我们只用记录有签到(1)或没签到(0)

具体见bitmap。

基数统计

指统计一个集合中不重复的元素个数

具体见hyperloglog

Bitmap

是什么

一句话:由0和1状态表现的二进制位的bit数组

说明:用string类型作为底层数据结构实现的一种统计二值状态的数据类型。

位图的本质是数组,它是基于string数据类型的按位的操作。

该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们可以称之为一个索引或者位格)。

Bitmap支出的最大位数是2的32次方位,他可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)

能干嘛

用于状态统计:Y/N,类似AtomicBoolean

根据需求

用户是否登陆过Y、N,比如京东每日签到送京豆

电影、广告是否被点击播放过

钉钉打卡上下班,签到统计

。。。

真实案例

日活统计

连续签到打卡

最近一周的活跃用户

统计指定用户一年中的登录天数

某用户按照一年365天,哪几天登录过?哪几天没有登录?全年登录的天数共计多少?

签到领取京豆

需求说明:

签到日历仅展示当月签到数据
签到日历需展示最近连续签到天数
假设当前日期是20210618,且20210616未签到
20210617已签到且0618未签到,则连续签到天数为1
20210617已签到且0618已签到,则连续签到天数为2
连续签到天数越多,奖励越大
所有用户均可签到
截至2020331日的12个月,京东年度活跃用户数3.87亿,同比增长24.8%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小凯小凯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值