当前位置: 首页 > news >正文

Redis实战(4)-- BitMap结构与使用

假设一个场景:

当业务需要进行存储不同用户是否进行访问过当前页面时候

可以使用一个hash进行存储,键存储访问时间,值存储对应用户编号;

但是这样会有个问题,大量的hash使用导致所消耗存储空间会很大。

所以这时候可以使用BitMaps进行存储,可以将键设置为访问时间,值设置为对应数组位置上的值,如:

Setbit  2022-9-27  3  1

//具体存储值是(32个位)....000000100  表示3号id用户访问过,这样可以一个二进制位置数组(获取对应的getbit)

BitMaps实现原理

其实现是使用用int字节码的每一位表示一个数字一个int占32位,可以表示32个数据状态,那么由此可以使用一个Int数组进行标识不同数据的状态:

对应映射关系如图:

tmp[0]可以表示0-31

Tmp[1]可以表示32-63

Tmp[2]可以表示64-95.....以此类推

优点:很大程度节省空间

例如:有5000万用户日活的平台,需要记录当前用户是否登录过

使用集合:id -- long型 (64位) 则存储所需空间为 8*50 000 000 = 400M(每天)

使用bitmaps: 1位存一个用户状态,则需要 1/8 * 50 000 000 = 12.5M

实际使用场景:

当需要进行存储数据状态,而且状态就两种情况下,使用bitmaps进行可以优化存储开销。

常见面试题:

第一题:在限制条件下,可以使用bitmap进行存储,因为一个int类型32位即可以标识32个成员,很大程度上节省空间,所以使用int[]数组进行存储标识哪个自然数出现,且其对应的位置肯定是有序的。

第二题:因为每条URL平均64字节,所以可以转为固定64位长度数值,作为bitmap索引,在哪一位就标识哪个URL,这样只需要计算出对应的URL的64位长度数值即可依据HASH函数算出对应的bitmap中索引位,如果为1标识存在,为0标识不存在。

第三题:可以使用bitmap进行标识,采用用户ID+时间戳进行转化为BitMap的唯一索引,通过hash函数运算,计算出对应的二进制标识位,查看,1为登录过,0为不活跃。

第五题:黑名单标识位为1,白名单标识位为0。

第六题:可以进行黑名单校验,URL黑名单进行拦截这样的,可以使用BitMap实现,经过hash计算后对应标识位值为1则为黑名单拦截,需要进行磁盘精准校验,同时也要考虑哈希冲突的情况处理,0则为正常通过无需校验,可以有效避免无效IO。

http://www.xdnf.cn/news/1217899.html

相关文章:

  • 基于单片机智能油烟机设计/厨房排烟系统设计
  • 用Python绘制SM2国密算法椭圆曲线:一场数学与视觉的盛宴
  • XML 用途
  • MVS相机+YOLO检测方法
  • 基于N32G45x+RTT驱动框架的定时器外部计数
  • 前端js通过a标签直接预览pdf文件,弹出下载页面问题
  • .NET 10 中的新增功能系列文章3—— .NET MAUI 中的新增功能
  • 《Java 程序设计》第 18 章 - Java 网络编程
  • C++面试5题--6day
  • LLC电源原边MOS管DS增加RC吸收对ZVS的影响分析
  • 开发避坑短篇(11):Oracle DATE(7)到MySQL时间类型精度冲突解决方案
  • PHP 5.5 Action Management with Parameters (English Version)
  • 专业鼠标点击器,自定义间隔次数
  • 网站技术攻坚与Bug围剿手记
  • Spring Cloud『学习笔记』
  • [硬件电路-111]:滤波的分类:模拟滤波与数字滤波; 无源滤波与有源滤波;低通、带通、带阻、高通滤波;时域滤波与频域滤波;低价滤波与高阶滤波。
  • 《Java 程序设计》第 17 章 - 并发编程基础
  • 澳交所技术重构窗口开启,中资科技企业如何破局?——从ASX清算系统转型看跨境金融基础设施的赋能路径
  • 数据结构与算法:队列的表示和操作的实现
  • HighgoDB查询慢SQL和阻塞SQL
  • 模型优化——在MacOS 上使用 Python 脚本批量大幅度精简 GLB 模型(通过 Blender 处理)
  • 打车小程序 app 系统架构分析
  • 【12】大恒相机SDK C#开发 ——多相机开发,枚举所有相机,并按配置文件中的相机顺序 将所有相机加入设备列表,以便于对每个指定的相机操作
  • 深入理解 Slab / Buddy 分配器与 MMU 映射机制
  • 【源力觉醒 创作者计划】对比与实践:基于文心大模型 4.5 的 Ollama+CherryStudio 知识库搭建教程
  • mysql结构对比工具
  • 类与对象(上),咕咕咕
  • ECMAScript2024(ES15)新特性
  • SpringAI 1.0.0发布:打造企业级智能聊天应用
  • AI 安监系统:为工业园安全保驾护航