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
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[数据结构】——七种常见排序

文章目录 前言 一.冒泡排序二.选择排序三.插入排序四.希尔排序五.堆排序六.快速排序hoare挖坑法前后指针快排递归实现&#xff1a;快排非递归实现&#xff1a; 七、归并排序归并递归实现&#xff1a;归并非递归实现&#xff1a; 八、各个排序的对比图 前言 排序&#xff1a;所谓…

Mac中的xshell、xftp

ROYAL TSX 插件式支持远程连接linux、支持命令行、支持ftp、支持远程windows桌面。 免费版就足够使用了。&#xff08;支持维护一个Connections文件夹&#xff09; 需要在本地创建一个文件夹&#xff0c;用以保存链接信息 使用方法

Bytebase 2.20.0 - 支持为工单事件配置飞书个人通知

&#x1f680; 新功能 支持 Databricks。支持 SQL Server 的 TLS/SSL 连接。支持为工单事件配置飞书个人通知。支持限制用户注册的邮箱域名。 &#x1f514; 重大变更 将分类分级同步设置从数据库配置移至工作空间的全局配置。 SQL 编辑器只读模式下只允许执行 Redis 的只读…

抖音外卖服务商申请全域外卖系统源码部署,如何保证竞争力?

随着本地生活市场规模的逐渐扩大&#xff0c;多家互联网公司在加大投入力度的同时&#xff0c;也在不断调整其市场竞争策略&#xff0c;作为国内头部社交平台的抖音也不例外。就在近日&#xff0c;抖音发布了关于新增《【到家外卖】内容服务商开放准入公告》的意见征集通知&…

OSI七层模型TCP/IP四层面试高频考点

OSI七层模型&TCP/IP四层&面试高频考点 1 OSI七层模型 1. 物理层&#xff1a;透明地传输比特流 在物理媒介上传输原始比特流&#xff0c;定义了连接主机的硬件设备和传输媒介的规范。它确保比特流能够在网络中准确地传输&#xff0c;例如通过以太网、光纤和无线电波等媒…

SCI二区复现|体育场观众优化算法(SSO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;M Nemati受到体育场观众的行为对比赛中球员行为的影响启发&#xff0c;提出了体育场观众优化算法&#xff08;Stadium Spectators Optimizer, SSO&#xff09;。 2.算法…

2023年第十四届蓝桥杯JavaB组省赛真题及全部解析(下)

承接上文&#xff1a;2023年第十四届蓝桥杯JavaB组省赛真题及全部解析&#xff08;下&#xff09;。 目录 七、试题 G&#xff1a;买二赠一 八、试题 H&#xff1a;合并石子 九、试题 I&#xff1a;最大开支 十、试题 J&#xff1a;魔法阵 题目来自&#xff1a;蓝桥杯官网…

Docker 安装最新版本 Jenkins

目录 1、下载、启动容器、更新到最新版本 2、查看初始密码两种方式&#xff1a; 3、默认安装的部分未汉化&#xff0c;删除默认的汉化插件。重启容器&#xff0c;重新安装汉化插件 4、安装 Publish over SSH、docker-build-step 、Docker Commons 插件 5、配置服务器连接信…

【LLM 论文】Self-Refine:使用 feedback 迭代修正 LLM 的 output

论文&#xff1a;Self-Refine: Iterative Refinement with Self-Feedback ⭐⭐⭐⭐ CMU, NeurIPS 2023, arXiv:2303.17651 Code: https://selfrefine.info/ 论文速读 本文提出了 Self-Refine 的 prompt 策略&#xff0c;可以在无需额外训练的情况下&#xff0c;在下游任务上产…

D13009-ASEMI电源开关三极管D13009

编辑&#xff1a;ll D13009-ASEMI电源开关三极管D13009 型号&#xff1a;D13009 品牌&#xff1a;ASEMI 批号&#xff1a;2024 沟道&#xff1a;NPN 电流&#xff1a;4A 电压&#xff1a;400V 安装方式&#xff1a;直插式封装 特性&#xff1a;NPN晶体管、三极管、12A…

分享10个AI搞钱副业,门槛低,普通人也能学的会!易上手!

前言 本期给大家分享的是利用AI 做副业的一些方法&#xff0c;大家可以挑选适合自己的赛道去搞钱 现在是人工智能时代&#xff0c;利用好AI 工具&#xff0c;可以降低普通人做副业的门槛&#xff0c;同时也能提高工作效率&#xff0c; 因此AI 赚钱的副业还是挺多的&#xff0…

【软考论文】项目背景及论文模版

目录 一、项目核心功能二、论文模板一、项目核心功能 二、论文模板 论文字数说明 总字数 2500 = 500 + 400 +400 * 3 + 300 背景:500 回答问题:400 三段论:1200 = 400 * 3 结论:300 ~ 400 摘要(<300字) 本人于2022年1月参与了某车厂的全渠道数字化精准营销平台项目,该…

想买一款好用的骨传导耳机怎么挑?一次给你搞定全方位的选购攻略

作为那么多年来购买了无数数码产品热爱听歌的我&#xff0c;也一直在寻找一款好的骨传导耳机&#xff0c;听音乐对我来说不仅仅是一种消遣方式&#xff0c;更多是一种对生活、工作上压力和困难的舒缓&#xff0c;在我购买了那么多款骨传导耳机中&#xff0c;对一些进行了测评与…

MySQL数据库——在Centos7环境安装

MySQL在Centos7环境安装 1.切换root用户 安装与卸载中&#xff0c;用户全部切换成为root&#xff0c;安装好后&#xff0c;普通用户也能使用 2.卸载不要的环境 要将自己环境中有关mysql的全都删除&#xff0c;避免安装过程中被影响 ps axj | grep mariadb 先检查是否有mari…

揭秘教学新利器:SmartEDA电路仿真软件,让电子学习更生动!

在数字化教育浪潮中&#xff0c;一款名为SmartEDA的电路仿真软件逐渐崭露头角&#xff0c;以其直观、易操作的特点&#xff0c;为电子学习领域带来了革命性的变化。今天&#xff0c;就让我们一起探讨如何使用SmartEDA进行教学&#xff0c;让电子学习变得更加生动有趣&#xff0…

健身馆预约小程序定制搭建会员管理系统次卡核销充值年卡saas账号

健身馆预约小程序定制搭建&#xff1a;打造高效会员管理系统 &#x1f3cb;️ 一、引言&#xff1a;为何需要健身馆预约小程序&#xff1f; 随着健康意识的提高&#xff0c;越来越多的人选择到健身馆进行锻炼。然而&#xff0c;传统的健身馆预约方式往往存在诸多不便&#xff…

Dataease安装,配置Jenkins自动部署

Dataease安装&#xff0c;配置Jenkins自动部署 一.安装Dataease 安装前准备&#xff1a;1.Ubuntu20.04 LTS国内源安装指定版本Docker 2.docker-compose安装 下载离线安装的安装包&#xff0c;下载地址&#xff1a;https://community.fit2cloud.com/#/download/dataease/v1-…

js导入导出

好久没有学习新的知识点了&#xff0c;今天开始学一下前端的知识点。直接在vscode里面编写&#xff0c;然后从基本的前端知识开始。 JS的导入导出 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"…

利用百数应用优化制造细节,提升生产效率的技术实践

制造管理是确保企业高效、高质生产的核心环节&#xff0c;对于提高企业的运营效率、质量控制、成本控制、交货期保障、资源优化、创新能力以及风险管理等方面都具有重要意义&#xff0c;它能帮助企业在激烈的市场竞争中保持领先地位&#xff0c;同时实现资源的有效利用和风险的…

动态规划06(leetcode322/279/139)—完全背包

参考资料&#xff1a; https://programmercarl.com/0322.%E9%9B%B6%E9%92%B1%E5%85%91%E6%8D%A2.html 322. 零钱兑换 题目描述&#xff1a; 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以…