Redis-Bitmap位图及其常用命令详解

1.Redis概述

在这里插入图片描述

2.Bitmap

  • Bitmap 是 Redis 中的一种数据结构,用于表示位图(bit array)。

  • 它通常用于处理大规模数据集中每个元素的状态,比如用户的在线/离线状态(每个用户对应一个位,表示在线(1)或离线(0))、用户签到情况(每天对应一个位,用户当天签到则将该位设为 1)、某个事件的发生情况等。

Bitmap 数据结构

  • 在 Redis 中,Bitmap 被实现为一个二进制字符串,其中每个位(bit)都可以被设置或清除。

  • 这使得 Bitmap 可以非常高效地表示大量的布尔值。

Bitmap 命令

1. SETBIT

将指定偏移量上的位设置为给定值(0 或 1)。
在这里插入图片描述
SETBIT key offset value 设置指定键(key)的位图(bitmap)中,特定偏移量(offset)处的位值(value)。

  • key: Redis中的键,表示位图所在的位置。
  • offset: 位图中的偏移量,即要设置的位的位置。偏移量从0开始,表示位图的第一个位。
  • value: 要设置的位的值,只能是0或1。

Tips:

  • 如果键不存在,则会创建一个新的字符串值,其中包含足够的位数以包含偏移量指定的位。
  • SETBIT 命令会设置位图中指定偏移量的位的值为指定的值(0或1)。
  • 如果偏移量超过当前字符串值的长度,Redis会自动扩展字符串以包含足够的位数。

返回值

  • SETBIT 命令返回设置前偏移量指定位的原始值(0或1)。

示例

假设有一个键名为 user:123:online,用于表示在线状态的位图:

SETBIT user:123:online 0 1

将位图 user:123:online 中偏移量为0的位设置为1,表示用户123现在在线。

在这里插入图片描述


2. GETBIT

获取指定偏移量上的位的值(0 或 1)。
在这里插入图片描述
GETBIT key offset 是 Redis 中用于获取指定键的位图中,特定偏移量处的位值的命令。

  • key: Redis 中的键,表示位图所在的位置。
  • offset: 位图中的偏移量,即要获取位值的位置。偏移量从0开始,表示位图的第一个位。

Tips:

  • 如果键不存在,或者偏移量超出了当前字符串值的长度,GETBIT 命令返回0。
  • GETBIT 命令返回指定偏移量的位的值,可以是0或1。

返回值

  • 返回值为偏移量处位的当前值(0或1)。

示例

假设有一个键名为 user:123:online,用于表示在线状态的位图:

GETBIT user:123:online 0

这个命令将返回位图 user:123:online 中偏移量为0的位的当前值,表示用户123是否在线(0表示离线,1表示在线)。

在这里插入图片描述

3. BITCOUNT

统计指定范围内的位为 1 的数量。
在这里插入图片描述

BITCOUNT key [start end [BYTE | BIT]] 是 Redis 中用于计算指定键的位图中,从 start 偏移量到 end 偏移量之间的所有位的数量的命令。

  • key: Redis 中的键,表示位图所在的位置。
  • start: 指定的起始偏移量。
  • end: 指定的结束偏移量。
  • BYTE | BIT: 可选参数,用于指定单位是字节(BYTE)还是位(BIT)。默认为 BIT。

Tips

  • 如果不加任何参数,默认情况下,BITCOUNT 命令会统计整个位图中所有位的数量。
  • 可以通过指定 start 和 end 参数来计算位图中特定范围内的位的数量。
  • 通过添加 BYTE 参数,可以将 start 和 end 参数解释为字节偏移量而不是位偏移量。

返回值

  • 返回值为指定范围内(或整个位图)的位的数量。

示例

假设有一个键名为 user:123:online,用于表示在线状态的位图:

BITCOUNT user:123:online

这个命令将返回位图 user:123:online 中所有位的数量,即用户123的在线状态记录数。

BITCOUNT user:123:online 0 10 BIT

这个命令将返回位图 user:123:online 中从偏移量0到10的位的数量。

在这里插入图片描述


4. BITOP

对一个或多个 Bitmap 进行位操作,并将结果保存到 destkey 中(支持 AND、OR、XOR、NOT 等操作)。
在这里插入图片描述
BITOP <AND | OR | XOR | NOT> destkey key [key ...] 是 Redis 中用于对多个位图执行位操作的命令。

  • AND: 对所有给定位图执行按位与操作,并将结果存储到目标位图 destkey 中。
  • OR: 对所有给定位图执行按位或操作,并将结果存储到目标位图 destkey 中。
  • XOR: 对所有给定位图执行按位异或操作,并将结果存储到目标位图 destkey 中。
  • NOT: 对单个给定位图执行按位非操作,并将结果存储到目标位图 destkey 中。

参数说明

  • destkey: 目标位图的键名,用于存储操作结果。
  • key [key …]: 要执行位操作的一个或多个位图键名。

Tips

  • 位操作命令允许将多个位图合并或修改为新的位图。
  • 操作的位图可以是相同长度的位图,也可以是不同长度的位图,Redis 会自动对较短的位图进行扩展。
  • NOT 操作只能对单个位图执行,对给定的位图取反后存储到目标位图中。

返回值

  • 返回值为目标位图 destkey 中设置的位数,即操作后目标位图中为1的位的数量。

示例

假设有两个位图键名为 user:123:onlineuser:456:online,用于表示用户的在线状态:

BITOP AND user:allonline user:123:online user:456:online

命令将对 user:123:onlineuser:456:online 进行按位与操作,并将结果存储到 user:allonline 中,表示同时在线的用户。

BITOP OR user:anyonline user:123:online user:456:online

命令将对 user:123:onlineuser:456:online 进行按位或操作,并将结果存储到 user:anyonline 中,表示任意在线的用户。

BITOP NOT user:123:offline user:123:online

命令将对 user:123:online 进行按位非操作,并将结果存储到 user:123:offline 中,表示用户123的在线状态取反。


5. BITPOS

寻找第一个或最后一个被设置为给定值的位的位置。

在这里插入图片描述
BITPOS 是 Redis 中用于查找位图中指定位的位置的命令。

  • key: Redis 中的键,表示要查找的位图。
  • bit: 要查找的位的值,可以是 0 或 1。
  • start: 可选参数,指定开始查找的偏移量,默认为 0。
  • end: 可选参数,指定结束查找的偏移量,默认为最后一个位。
  • BYTE | BIT: 可选参数,用于指定按字节还是按位查找,默认为 BIT。

Tips

  • BITPOS 命令用于在位图中查找指定位的位置。可以指定开始和结束的偏移量来限制搜索范围。
  • 当指定 bit 为 1 时,BITPOS 将返回位图中第一个出现的 1 的位置;当指定 bit 为 0 时,BITPOS 将返回位图中第一个出现的 0 的位置。
  • 可以通过指定 BYTE 参数来将偏移量解释为字节而不是位。

返回值

  • 返回值为指定位图中指定位的位置,如果没找到对应的位,则返回 -1。

示例

假设有一个键名为 user:123:permissions,用于表示用户权限的位图:

SETBIT user:123:permissions 0 1
SETBIT user:123:permissions 3 1
SETBIT user:123:permissions 7 1

这个命令将创建一个位图 user:123:permissions,并将偏移量0、3和7的位设置为1。

BITPOS user:123:permissions 1

命令将返回位图 user:123:permissions 中第一个出现的 1 的位置,即偏移量0。

BITPOS user:123:permissions 1 2

命令将在偏移量2之后的范围内查找第一个出现的 1,由于在此范围内没有 1,因此返回 -1。

BITPOS user:123:permissions 0 1 BYTE

命令将以字节为单位,在偏移量1之前的范围内查找第一个出现的 1 的位置。

  • BITPOS 命令适用于需要确定位图中特定位的位置的场景,例如查找权限位、统计事件发生位等。

更多命令可以去官网查看哦~https://redis.io/docs/latest/commands/?group=bitmap
在这里插入图片描述

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

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

相关文章

计算机基础(6)——编码与解码-二进制与文本

&#x1f497;计算机基础系列文章&#x1f497; &#x1f449;&#x1f340;计算机基础&#xff08;1&#xff09;——计算机的发展史&#x1f340;&#x1f449;&#x1f340;计算机基础&#xff08;2&#xff09;——冯诺依曼体系结构&#x1f340;&#x1f449;&#x1f34…

Rust 程序设计语言学习——泛型、Trait和生命周期

每一种编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是泛型。泛型是具体类型或其他属性的抽象替代。 Trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 Trait 以一种抽象的方式定义共同行为。可以使用 trait bounds 指定泛型是任何拥有特定行为…

Mac excel 同时冻结首行和首列

1. 选择B2窗格 2. 选择视图 3. 选择冻结窗格 最后首行和首列的分割线加粗了就表示成功了

youlai-boot项目的学习(3) 本地redis、MinIO的安装与配置

youlai-boot项目除了使用mysql数据库、还有redis&#xff0c;以及OSS服务&#xff0c;OSS除了云OSS服务&#xff0c;还有自部署的MinIO服务。 前面我们已经安装好了mysql数据库&#xff0c;那么我们来看看本地redis、MinIO服务怎么部署 环境 mac OS&#xff0c; iterm2&#…

C语言力扣刷题8——环形链表——[快慢双指针, 龟兔赛跑]

力扣刷题8——环形链表——[快慢双指针, 龟兔赛跑] 一、博客声明二、题目描述三、解题思路1、思路说明 四、解题代码&#xff08;附注释&#xff09; 一、博客声明 找工作逃不过刷题&#xff0c;为了更好的督促自己学习以及理解力扣大佬们的解题思路&#xff0c;开辟这个系列来…

分布式事务解决方案(八股)

1. CAP理论 一致性【Consistency】&#xff1a;所有节点访问最新的数据可用性【Availability】&#xff1a;非故障节点响应正常分区容错性【Partition Tolerance】&#xff1a;分布式系统出现网络分区&#xff0c;仍能对外提供服务 附&#xff1a;网络分区&#xff1a;分布式…

拳打开源SOTA脚踢商业闭源的LI-DiT是怎样炼成的?(商汤/MMLab/上海AI Lab)

文章地址&#xff1a;https://arxiv.org/pdf/2406.11831 仅基于解码器的 Transformer 的大语言模型&#xff08;LLMs&#xff09;与 CLIP 和 T5 系列模型相比&#xff0c;已经展示出卓越的文本理解能力。然而&#xff0c;在文本到图像扩散模型中利用当前先进的大语言模型的范例…

[机器学习]-3 万字话清从传统神经网络到深度学习

神经网络&#xff08;Neural Networks, NNs&#xff09;是机器学习的一种重要方法&#xff0c;灵感来源于生物神经系统&#xff0c;由大量互联的节点&#xff08;称为神经元或单元&#xff09;组成&#xff0c;通过调整这些节点间的连接权重来学习和表示复杂的非线性关系。传统…

中霖教育怎么样?注册会计师考试难吗?

中霖教育&#xff1a;注册会计师&#xff08;CPA&#xff09;考试的难度高吗&#xff1f; 对于不同背景的考生来说&#xff0c;注册会计师考试的挑战程度不同。那些有良好基础和充裕准备时间的考生&#xff0c;通过考试的可能性要超过那些从零开始且准备时间有限的人。 据最近…

GPOPS-II教程(5): 月球探测器着陆最优控制问题

文章目录 问题描述GPOPS代码main functioncontinuous functionendpoint function仿真结果 最后 问题描述 参考文献&#xff1a;[1] Meditch J. On the problem of optimal thrust programming for a lunar soft landing[J]. IEEE Transactions on Automatic Control, 1964, 9(4…

6.28学习笔记

一、马克思 1、对立的历史观&#xff1a;唯物史观、唯心史观&#xff08;不是“主义”&#xff09; 2、人口因素对社会发展起&#xff08;制约和影响&#xff09;作用 3、自然地理环境是人类社会生存和发展&#xff08;永恒的、必要的条件&#xff09; 4、哲学社会科学的发展水…

Linux基础- 使用 Apache 服务部署静态网站

目录 零. 简介 一. linux安装Apache 二. 创建网页 三. window访问 修改了一下默认端口 到 8080 零. 简介 Apache 是世界使用排名第一的 Web 服务器软件。 它具有以下一些显著特点和优势&#xff1a; 开源免费&#xff1a;可以免费使用和修改&#xff0c;拥有庞大的社区支…

Web渗透:任意文件下载

任意文件下载漏洞&#xff08;Arbitrary File Download Vulnerability&#xff09;是一种常见的Web安全漏洞&#xff0c;它允许攻击者通过修改输入参数&#xff0c;从服务器下载任意文件&#xff0c;而不仅仅是预期的文件&#xff1b;通常这种漏洞出现在处理用户输入的地方&…

343. 整数拆分(leetcode)

343. 整数拆分&#xff08;leetcode&#xff09; 题目描述 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。返回你可以获得的最大乘积 。 示例1 输入: n 2 输出: 1 解释: 2 1 1, 1 1…

python CSSE7030

1 Introduction In this assignment, you will implement a (heavily) simplified version of the video game ”Into The Breach”. In this game players defend a set of civilian buildings from giant monsters. In order to achieve this goal, the player commands a s…

Spring MVC数据绑定和响应——复杂数据绑定(三)复杂POJO绑定

一、复杂POJO数组绑定的使用场景 使用简单POJO类型已经可以完成多数的数据绑定&#xff0c;但有时客户端请求中传递的参数比较复杂。例如&#xff0c;在用户查询订单时&#xff0c;页面传递的参数可能包括订单编号、用户名称等信息&#xff0c;这就包含了订单和用户两个对象的信…

AI进阶指南第四课,大模型优缺点研究?

在上一篇文章中&#xff0c;我主要探讨了LM模型与企业级模型的融合。 但是&#xff0c;在文末对于具体的大模型优缺点只是简单地说明了一下&#xff0c;并不细致。 因此&#xff0c;在这一节&#xff0c;我将更为细致地说明一下大模型的优缺点。 一&#xff0c;隐私安全 将L…

2018年全国大学生数学建模竞赛A题高温服装设计(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分Matlab源代码问题11 求解h1h22 已知h1h2求解温度分布 问题21 求解第二层最佳厚度 四、完整word版论文和源代码&#xff08;两种获取方式&#xff09; 一、部分题目 2018 年高教社杯全国大学生数学建模竞赛题目 A 题 高温作业专用服…

vCenter- KMS Server healthy warning

- 问题摘要&#xff1a;KMS Server healthy warning. - 分析/故障排除: 检查集群配置-Security-Key Providers界面&#xff0c;发现KMS Server并没有完整配置并且目前集群内的虚机没有使用加密功能&#xff08;VM Encryption&#xff09;&#xff0c;您可以忽略该告警提示。 …

Linux C 程序 【02】创建线程

1.开发背景 上一个篇章&#xff0c;基于 RK3568 平台的基础上&#xff0c;运行了最简单的程序&#xff0c;然而我们使用了 Linux 系统&#xff0c;系统自带的多线程特性还是比较重要的&#xff0c;这个篇章主要描述线程的创建。 2.开发需求 设计实验&#xff1a; 创建一个线程…