bitmap(位图)的使用

news2024/9/25 19:22:02

零存零取,整存零取,整存整取, 零存整取

bitmap介绍

位图不是真正的数据类型,它是定义在字符串类型中,一个字符串类型的值最多能存储512M字节的内容,    位上限:2^(9(512)+10(1024)+10(1024)+3(8b=1B))=2^32b

语句操作:

setbit

语法:SETBIT key offset value (offset位偏移量,从0开始),

setbit完成设置后,显示的是被覆盖的该下标(索引)的值,就是旧值

getbit获取某一位上的值。   语法:GETBIT key offset
bitpos

返回指定值0或者1在指定区间上首次出现的下标。 

语法:BITPOS key bit [start] [end](字节索引,0表示第一个字节)

bitcount

统计指定位区间上值为1的个数。

语法:BITCOUNT key [start] [end] start end     

字节的索引 正方向从左向右从0开始,注意官方start、end是位,测试后是字节

bittop

位操作。

 语法:BITOP operation destkey key [key ...]

operation :AND 、 OR 、 NOT 、 XOR(异或)

BITOP AND destkey key [key ...] 对一个或多个 key 求逻与,并将结果保存到 destkey

BITOP OR destkey key [key ...] 对一个或多个 key 求逻辑或,并将结果保存到 destkey

BITOP XOR destkey key [key ...] 对一个或多个 key 求逻辑异或,并将结果保存到 destkey

BITOP NOT destkey key 对给定 key 求逻辑非,并将结果保存到 destkey

除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入,当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0,空的 key 也被看作是包含 0 的字符串序列

Redis的二进制位:

127.0.0.1:7000> set k7 ab
OK
127.0.0.1:7000> get k7
"ab"
127.0.0.1:7000> bitcount k7
(integer) 6
127.0.0.1:7000> bitcount k7 0 0
(integer) 3
127.0.0.1:7000> bitcount k7 1 1
(integer) 3

127.0.0.1:7000> set k8 中
OK
127.0.0.1:7000> bitcount k8
(integer) 13
127.0.0.1:7000> get k8
"\xe4\xb8\xad"

Bitmap应用场景:

网站用户签到的天数统计
用户ID为key,天作为offset,上线置为1 366> 000000000000000

366 /8=46Byte ID为18的用户,今年的第1天签到、第30天签到

```text
127.0.0.1:7000[2]> setbit u18 1 1
(integer) 0
127.0.0.1:7000[2]> setbit u18 30 1
(integer) 0
127.0.0.1:7000[2]> bitcount u18 #统计id为18的用户签到总次数
(integer) 2
127.0.0.1:7000[2]> keys u*
1) "u18"
```

#### 
按天统计网站活跃用户
天作为key,用户ID为offset,上线置为1

求一段时间内活跃用户数 5000 0000 / 8*366= 6.3MB=*366 (五千万活跃用户1年才产生2GB左右的数据)

```text
127.0.0.1:7000>SETBIT 20190601 5  1    #0000 0100
127.0.0.1:7000>SETBIT 20190602 7  1    #0000 0001 
127.0.0.1:7000>SETBIT 20190603 7  1    #0000 0001
求6月1日到6月10日的活跃用户数
127.0.0.1:7000>BITOP OR users 20190601 20190602 20190603 ... 20190610
127.0.0.1:7000>BITCOUNT users    #目标key为users
结果为2
```

#### 
用户在线状态、在线人数统计
127.0.0.1:7000> SETBIT online 5  1 #0000 0100 上线为1
(integer) 0
127.0.0.1:7000> SETBIT online 7  1 #0000 0101
(integer) 0
127.0.0.1:7000> bitcount online #当前在线人数
(integer) 2 
127.0.0.1:7000> SETBIT online 7  0
(integer) 1
127.0.0.1:7000> bitcount online #当前在线人数
(integer) 1

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

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

相关文章

数据结构与算法 第四天(串、数组、广义表)

串(String) 任意字符组成的有限序列 串的类型定义 串的顺序存储结构 模式匹配算法 确定主串所含字串第一次出现的位置。 BF算法 穷举法,从每个字符开始依次匹配 KMP算法 链式存储 数组 基本操作 特殊矩阵存储 对称矩阵 三角矩阵 对角矩阵…

UDP英译汉网络词典

这里我们用UDP实现一个简单的英译汉小词典。我们还是仿照前一篇的UDP编程,将各自的组件封装起来,实现高内聚低耦合。 一. 字典翻译功能实现 首先我们将我们的字典知识库放在txt文本中。 apple: 苹果 banana: 香蕉 cat: 猫 dog: 狗 book: 书 pen: 笔 ha…

容器访问外网

目录 1 容器访问外网 1.1 容器访问外网的原理 1.2 容器与外网通讯原理解剖 2 docker跨主机网络 2.1 实现docker跨主机通讯方式 2.2 macvlan网络方式实现跨主机通信 2.2.1 macvlan网络方式 2.2.2 macvlan网络间的隔离和连通 2.2.3 实现方法如下: 1 容器访问外网 1.…

Django+Vue社区养老管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者&…

详解Spring AOP

前言👀~ 上一章我们介绍了SpringBoot统一功能相关的知识点,今天来讲解Spring框架另外一个核心AOP,细!!! 什么是AOP? 什么是面向切面编程呢? 什么是面向特定方法编程呢&#xff1…

Bahdanau注意力机制

介绍 在Bahadanu注意力机制中,本质上是序列到序列学习的注意力机制实现,在编码器-解码器结构中,解码器的每一步解码过程都依赖着整个上下文变量,通过Bahdanau注意力,使得解码器在每一步解码时,对于整个上下…

ET6框架(七)Excel配置工具

文章目录 一、Excel表的基本规则:二、特殊特殊标记三、编译路径说明四、动态获取数据五、可导表类型查看: 一、Excel表的基本规则: 在框架中我们的Excel配置表在ET > Excel文件夹中 1.在表结构中需要注意的是起始点必须在第三行第三列,且…

91.游戏的启动与多开-游戏启动

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:易道云信息技术研究院 上一个内容:90.游戏安全项目-项目搭建与解析 以90.游戏安全项目-项目搭建与解析它的代码为基础进行…

[java][代码] java中date格式化输出时间字符串

Date date new Date();//具备默认的风格//DateFormat dateFormDateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);DateFormat dateFormnew SimpleDateFormat("yyyy-mm-dd");System.out.println(dateForm.format(date)); 这段Java代码演示了如何使用S…

YOLOv9改进策略【模型轻量化】| PP-LCnet

一、本文介绍 本文记录的是利用PP-LCNet中的DepSepConv模块优化YOLOv9中的RepNCSPELAN4。YOLOv9在使用辅助分支后,模型的参数量和计算量相对较大,本文利用DepSepConv模块改善模型结构,使模型在几乎不增加延迟的情况下提升网络准确度。 文章目…

海外新闻稿发布对区块链项目具有深远的影响

在知名媒体平台上发布新闻稿对区块链项目具有深远的影响,例如全球雅虎,彭博社这些全球知名财经媒体,能够显著提升项目的曝光度和信誉,吸引潜在投资者以及其他利益相关者的关注。以下是几个方面的详细分析: 1. 增强品牌…

区块链通证系统功能分析

区块链通证系统功能分析涉及多个关键方面,以确保系统能够满足不同的业务需求和合规性要求。 同质与非同质通证:区块链通证系统需要支持同质通证(如ERC-20)和非同质通证(如ERC-721),以适应不同类…

如何快速掌握销售数据?一张报表就够了

在销售管理中,数据是企业做出战略决策的重要依据。有效的销售数据分析不仅能帮助企业精准把握市场动向,还能提高销售团队的工作效率,优化客户关系管理。然而,面对海量的销售数据,如何高效地解读这些数据呢?…

Java SpringBoot实现大学生平时成绩量化管理系统:一步步教你构建高效成绩统计,集成MySQL数据库,打造自动化评分流程

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

three.js 编辑器,动画,着色器, cesium 热力图,聚合点位,大量点线面, 图层,主题,文字,等众多案例中心

对于大多数的开发者来言,看了很多文档可能遇见不到什么有用的,就算有用从文档上看,把代码复制到自己的本地大多数也是不能用的,非常浪费时间和学习成本, 尤其是three.js , cesium.js 这种难度较高&#xff…

ThinkPHP之入门讲解

文章目录 1 ThinkPHP1.1 框架1.1.1 目录讲解1.1.1.1 5.x1.1.1.2 6.0以上 1.1.2 配置文件1.1.2.1 5.x1.1.2.2 6.0以上 1.1.3 函数文件1.1.3.1 5.x1.1.3.1 6.0以上 1.2 控制器1.2.1 控制器的后缀1.2.2 框架中的命名空间1.2.3 url访问1.2.4 调试模式1.2.4.1 5.x1.2.4.2 6.0以上 1.…

Oracle迁移至openGauss的工具:ora2op的安装配置

目录 前言 1. ora2op的下载 1.1 下载地址 1.2 ora2op 介绍 2. ora2op的安装 2.1 安装perl的依赖包 2.2 安装连接Oracle数据库的模块 2.3 安装ora2op 2.4 安装连接openGauss数据库的模块 前言 本工具是使用perl,在安装时会遇到各种问题,解决方式…

Keil5 Debug模式Watch窗口添加的监控变量被自动清除

Keil5 Debug模式Watch窗口添加的监控变量被自动清除 问题解决记录 问题描述:每次进入Debug模式时,watch窗口里面上一次调试添加的监控变量都会被全部清掉 如图: 退出Debug模式后,重新进入Debug模式: 解决方法&…

用户体验设计案例:提升电商网站的用户体验

在数字化时代,用户体验设计(UX Design)已成为影响品牌成功的关键因素之一。尤其是在竞争激烈的电商行业,如何通过优质的用户体验来吸引和留住客户,是每个企业都需要面对的挑战。本文将通过一个具体的电商网站设计案例&…

解析 uni-app 小程序分包策略:合理优化包体积分布

引言 微信小程序的流行使得越来越多的开发者投入到小程序的开发中。但是,随着项目规模的增大,小程序的性能也会面临一些挑战。其中,小程序分包策略是提升性能的重要一环。 同时,uni-app 的流行也使众多的移动端开发者选择使用 u…