IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 3-位图的使用场景 -> 正文阅读

[大数据]3-位图的使用场景

1、二进制安全

  • redis只存储字节流,与外界交互,存取都是字节流,只要双方客户端有统一的编解码,数据就不会被破坏。
  • redis拿的是字节流,编码是一个字符一个字节
  • redis-cli --raw 连接redis服务,并触发编码器的格式化。如果不格式化,redis只会识别ASCII码的,超出ASCII码,则显示为16进制

2、位图的使用场景

2.1、场景一:统计一段时间内用户的登录天数

  • 如果用数据库实现

    • 创建表,用户每笔登录都产生一行记录,然后登录登录时间,还有其他数据也需要记录。MySQL数据库表与表时间还需要主外键。算一下成本,表最小,每行存一个ID和登录日期,各自至少4个字节,也得要8个字节,就是说一个用户的一笔登录就要消耗8个字节,那再乘以登录天数,大概200多天,8*200/8=200,即200个字节,表示了一个用户一年的登录状态,然后几百万个用户,成本比较大

    • 再来看redis如何实现呢?如果每一天对应一个二进制位,从左到右,第一个二进制位表示第一天,第二个二进制位表示第二天,最多366个二进制位,366/ 8 = 46,即最多用46个字节就表示了一个用户一年的登录状态,乘以100万个用户,则460KB就表示了100万个用户全年的登录状态。举例如下:该用户有3次登录

    • setbit Bob 1 1 Bob用户第2天登录了

    • setbit Bob 7 1 Bob用户第8天登录了

    • setbit Bob 364 1 Bob用户第365天登录了


    统计今年最后2周的登录次数为1

    bitcount Bob -2 1 ----->结果为1

    2.2、场景二:京东618活动,在这一天,给登录的用户送礼物,一个人只能送一件礼物,共需要准备多少礼物

? 电商用户划分为僵尸用户、冷热用户、忠诚用户,每个用户还可能有多个账号。我们怎么去统计呢?其实我们很多用户都没有经常登录,我们统计活跃用户数即可。那么统计活跃用户数时,需要去重,比如1号到3号这期间,不管这个用户登录了1次还是2次,只要登录了就算,这得去重。

? 用redis的位图来做,用日期当做key,value呢?我们把每个用户的ID映射到一个二进制位上,每一个二进制位都表示一个用户

? setbit 20210101 0 1 # 用户Bob登录了,用0号位表示Bob

? setbit 20210102 0 1 # 用户Bob还是登录了

? setbit 20210102 7 1 # 用户张三登录了,用第8号位表示张三


  • 统计结果:

? bitop or orkey 20210101 20210102

? bitcount orkey 0 -1 # 结果为2,即表示有2个用户登录了

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 09:57:56  更:2021-11-27 09:59:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:43:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码