redis中bitmap应用

原理介绍     

  Redis Bitmap 是 Redis 中的一种数据结构,它类似于位图,可以用来表示一组二进制位,每个二进制位只能是 0 或 1。Redis Bitmap 提供了一些操作命令,如 SETBIT、GETBIT、BITCOUNT 等,可以对位图进行设置、获取和计数等操作。

        在Redis 中,可以把Bitmaps想象成一个以比特位为单位的数组,数组的每个单元只能存储0和1,数组的下标在Bitmaps 中叫做偏移量。

        BitMap 在 Redis 中并不是一个新的数据类型,其底层是 Redis 实现。Redis 其实只支持 5 种数据类型,并没有 BitMap 这种类型,BitMap 底层是基于 Redis 的字符串类型实现的。

        BitMap占用的空间,就是底层字符串占用的空间。假如BitMap偏移量的最大值是OFFSET_MAX,那么它底层占用的空间就是︰

8*1024*1024*512 = 2^32

由于C语言中字符串的末尾都要存储一位分隔符,所以实际上BitMap的offset值上限是︰

2^32-1

       适用场景

  1. 用户在线状态:可以使用一个位图来表示用户的在线状态,每个用户对应一个二进制位,如果该位为 1,则表示该用户在线;如果该位为 0,则表示该用户离线。通过 SETBIT 命令可以将某个用户的在线状态设置为 1 或 0,通过 BITCOUNT 命令可以统计在线用户的数量。

  2. 签到系统:可以使用一个位图来表示用户的签到情况,每个二进制位表示一天,如果该位为 1,则表示该用户在该天签到过;如果该位为 0,则表示该用户在该天未签到。通过 SETBIT 命令可以将某个用户在某天的签到状态设置为 1,通过 BITCOUNT 命令可以统计某个用户累计签到的天数。

  3. 统计 UV 和 PV:可以使用一个位图来表示用户的访问情况,每个二进制位表示一天,如果该位为 1,则表示该天有用户访问过网站;如果该位为 0,则表示该天没有用户访问过网站。通过 SETBIT 命令可以将某个用户在某天的访问状态设置为 1,通过 BITCOUNT 命令可以统计某段时间内的 UV 和 PV 数量。

  4. 过滤器:可以使用一个位图来表示一组元素的存在情况,每个二进制位表示一个元素,如果该位为 1,则表示该元素存在;如果该位为 0,则表示该元素不存在。通过 SETBIT 命令可以将某个元素的存在状态设置为 1,通过 GETBIT 命令可以查询某个元素是否存在。

  5. 统计活跃用户:使用日期key,用户ID为offset,当日活跃就设置为1。可统计连续多天登录等情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/598195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Abaqus许可管理安全策略:保护您的知识产权和业务安全

在当今的知识产权保护和许可管理领域,安全策略的制定和实施至关重要。Abaqus许可管理安全策略旨在保护企业的知识产权和业务安全,确保企业在日益激烈的市场竞争中保持领先地位。 一、Abaqus许可管理安全策略的核心优势 严密保护知识产权:Aba…

2023春季李宏毅机器学习笔记 05 :机器如何生成图像

资料 课程主页:https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub:https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程:https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、图像生成常见模型…

【React】04-关于React Props的实践

关于React Props的实践 背景分析和state区别 背景 React 组件相互传参时,除了用state,还会经常看到一个Props对象,关于它的面纱及两者区别,将在文本进行实践及分析。 分析 React 中的 props 是用于从父组件向子组件传递数据的…

Qt通过pos()获取坐标信息

背景:这是一个QWidget窗体,里面是各种布局的组合,一层套一层。 我希望得到绿色部分的坐标信息(x,y) QPoint get_pos(QWidget* w, QWidget* parent) {if ((QWidget*)w->parent() parent) {return w->pos();}else {QPoint pos(w->po…

Vue-Cli 5.0.0搭建Cesium环境

1、创建vue-cli项目 1、查看vue版本 使用指令:vue -V 2、创建Vue项目 1、在需要创建文件的目录,输入cmd 2、在命令行,输入 vue create <project-name>,并选择最后一项 3、选择插件 4、选择Vue版本3.0 5、根据图示选择

【MySQL】MySQL 8.0.35 版本 WIN10 安装简单易懂(版本8+窗口函数支持)

1、下载地址 MySQL Community Downloads 在 Select Version: 选择 8.0.35 版本点击下面 Other Downloads: 里面的 Windows (x86, 64-bit), ZIP Archive (mysql-8.0.35-winx64.zip) 后面的 Download 对压缩包下载点击 No thanks, just start my download. 再点击保存之后进行下…

2.HDFS 架构

目录 概述架构HDFS副本HDFS数据写入流程NN 工作原理DN 工作原理 结束 概述 官方文档快递 环境&#xff1a;hadoop 版本 3.3.6 相关文章速递 架构 HDFS HDFS 架构总结如下&#xff1a; a master/slave architecture 一主多从架构a file is split into one or more blocks a…

mysql 高阶查询

目录 基础用法 表连接 求交集 内连接 左/右连接 多表查询 子查询 分组统计 求左表无交集 求右表无交集 求两个表无交集 面试题&#xff1a;视图表的数据是否能修改&#xff1f; 无值 和 空值null 的区别&#xff1f; 存储过程&#xff08;数据库脚本&#xff09…

激光焊接机:塑料产品制造中的革命性优势

随着科技的飞速发展&#xff0c;激光焊接机在塑料产品制造领域的应用越来越广泛。相较于传统的焊接技术&#xff0c;激光焊接机在塑料产品制造中展现出诸多优势&#xff0c;成为现代工业生产中不可或缺的一部分。 一、精确、高效的焊接性能 激光焊接机采用高能激光束作为焊接热…

华为交换机怎么添加和剥除VLAN标签

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 华为交换机VLAN标签的添加和剥除处理过程 接口对收发的以太网数据帧添加或剥除VLAN标签的处理依据接口的接口类型和缺省VLAN。 由上面各类接口添加或…

http 状态码 列表

1XX系列&#xff1a; 指定客户端应相应的某些动作&#xff0c;代表请求已被接受&#xff0c;需要继续处理。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码&#xff0c;所以除非在某些试验条件下&#xff0c;服务器禁止向此类客户端发送 1xx 响应。 2XX系列&#xff1a; 代表…

windows通过ssh连接Liunx服务器并实现上传下载文件

连接ssh 输入&#xff1a;ssh空格用户名ip地址&#xff0c;然后按Enter 有可能出现下图提示&#xff0c;输入yes 回车即可 输入 password &#xff0c;注意密码是不显示的&#xff0c;输入完&#xff0c;再按回车就行了 以上是端口默认22情况下ssh连接&#xff0c;有些公司它…

(vue)el-popover鼠标移入提示效果

(vue)el-popover鼠标移入提示效果 效果&#xff1a; 代码&#xff1a; <el-form-itemv-for"(item,index) of ele.algorithmParameters":key"index":label"item.parametersName"class"descInput" ><el-input v-model"i…

柱面,盘片,盘面,扇面,磁头,磁道,扇区,CHS地址,LAB地址

柱面&#xff0c;盘片&#xff0c;盘面&#xff0c;扇面&#xff0c;磁头&#xff0c;磁道&#xff0c;扇区&#xff0c;CHS地址&#xff0c;LAB地址1 CHS地址 CHS地址指的是柱面&#xff08;Cylinder&#xff09;、磁头&#xff08;Head&#xff09;、扇区&#xff08;Secto…

Kotlin:Set其实是有插入的顺序?

MutableSet怎么能调用indexOf去获取它的插入顺序呢&#xff1f;参考官网Collections overview | Kotlin Documentationhttps://kotlinlang.org/docs/collections-overview.html#set翻不了墙的看下面 &#xff08;MutableSet的默认实现是LinkedHashSet&#xff0c;LinkedHashSet…

【论文阅读笔记】Stable View Synthesis 和 Enhanced Stable View Synthesis

目录 Stable View Synthesis摘要引言 Enhanced Stable View Synthesis 从Mip-NeRF360的对比实验中找到的两篇文献&#xff0c;使用了卷积神经网络进行渲染和新视角合成&#xff0c;特此记录一下 ToDo Stable View Synthesis paper&#xff1a;https://readpaper.com/pdf-ann…

Docker 存储卷管理

一、存储卷简介 存储卷是一种方便、灵活、高效的Docker容器内数据存储方式。存储卷可以在容器内的不同进程间共享数据&#xff0c;并且可以在容器之间共享和重用。 二、存储卷的优点 可以在容器之间共享和重用&#xff0c;避免了在不同容器之间复制数据的繁琐。对数据卷的修…

BMS开发之面向对象思想(adbms1818)

借鉴adbms1818的底层驱动代码 前言&#xff1a;adbms1818的主要用途就是不同种类的寄存器里面存储不同的数据&#xff0c;程序员需要通过特定的协议往寄存器里面写入或者读出数据 &#xff08;1&#xff09;定义一个结构体 里面存储了adbms1818的所有寄存器的信息。然后我们看…

航天航空线束工艺3D虚拟展馆支持多人异地参观漫游

为了满足汽车线束企业员工工作需要&#xff0c;让新老员工了解到更先进、规范的线束工艺设计技术&#xff0c;华锐视点基于VR虚拟仿真、web3d开发和图形图像技术制作了一款汽车线束工艺设计VR虚拟仿真模拟展示系统。 汽车线束工艺设计VR虚拟仿真模拟展示系统共分为pc电脑端和VR…

如何启动flowable的Flowable UI画工作流程图

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…