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

news2024/11/25 13:23:16

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.coloradmin.cn/o/1872281.html

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

相关文章

【课程总结】Day12:YOLO的深入了解

前言 在【课程总结】Day11&#xff08;下&#xff09;&#xff1a;YOLO的入门使用一节中&#xff0c;我们已经了解YOLO的使用方法&#xff0c;使用过程非常简单&#xff0c;训练时只需要三行代码&#xff1a;引入YOLO&#xff0c;构建模型&#xff0c;训练模型&#xff1b;预测…

分类预测 | PSO-PNN基于粒子群算法优化概率神经网络的数据分类预测(Matlab)

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别 目录 分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.PSO-PNN基于粒子群算法优化概率神经网络的数据…

SQLite:一个极简使用教程

SQLite是一个轻量级的、文件系统基础的数据库&#xff0c;它被设计为配置简单、易于部署。SQLite数据库存储在一个单一的磁盘文件中&#xff0c;这意味着数据库的创建和维护都非常简单。 1. SQLite特点 轻量级&#xff1a;SQLite不需要一个独立的服务器进程。它是一个嵌入式SQ…

Steam夏促遇到社区打不开、社区进不去的处理措施一览

在Steam夏促中&#xff0c;绝大部分Steam游戏都会有折扣优惠&#xff0c;包括一些3A大作在夏促中也会降价售卖&#xff0c;玩家可以低价购买到自己心仪的游戏。不少玩家进入Steam社区查看游戏评价时遇到社区打不开、社区进不去的情况&#xff0c;不知道怎么解决&#xff0c;下面…

Pycharm一些问题解决办法

研究生期间遇到关于Pycharm一些问题报错以及解决办法的汇总 ModuleNotFoundError: No module named sklearn’ 安装机器学习库&#xff0c;需要注意报错的sklearn是scikit-learn缩写。 pip install scikit-learnPyCharm 导包提示 unresolved reference 描述&#xff1a;模块…

React小记(五)_Hooks入门到进阶

React 16.8 版本 类组件 和 函数组件 两种组件共存&#xff0c;到目前 React 18 版本&#xff0c;官方已经不在推荐使用类组件&#xff0c;在函数组件中 hooks 是必不可少的&#xff0c;它允许我们函数组件像类组件一样可以使用组件的状态&#xff0c;并模拟组件的生命周期等一…

新手向导:掌握Axure RP的第一步

其实很多时候&#xff0c;我们很容易把教程做得太复杂&#xff0c;让学生失去重点被复杂的理论吓到。入门基础的时候只需要先弄清楚两个核心内容&#xff0c;学起来就容易多了:一是简单了解这个软件&#xff0c;二是学习这个软件的基本操作。所以如果你问我什么是好的 Axure RP…

chrome 配置允许跨域

目录 1.Chrome跨域插件配置 1.1启动插件 1.2. 设置本地调试跨域 2 Firefox跨域插件 2.1. 安装插件 CORS Everywhere 2.2. 启动插件 3 工具下载链接 1.Chrome跨域插件配置 使用chrome插件“Allow CORS: Access-Control-Allow-origin ”来解决跨域问题。 点击pin图标&…

小语言模型SLM 百科全书

想象一下这样一个世界&#xff1a;智能助手不再驻留在云端&#xff0c;而是驻留在你的手机上&#xff0c;无缝理解你的需求并以闪电般的速度做出响应。这不是科幻小说&#xff1b;这是小型语言模型 (SLM) 的前景&#xff0c;这是一个快速发展的领域&#xff0c;有可能改变我们与…

倒装COB封装技术与常规SMD封装技术差异对比

倒装COB显示屏与常规SMD LED显示屏一个很大的差异点就是在于封装工艺的不同&#xff0c;COB&#xff08;Chip on Board&#xff09;封装和SMD&#xff08;Surface Mounted Device&#xff09;封装是LED显示屏领域中两种常见的技术&#xff0c;所表现出来的差异主要在于封装结构…

“卷王”新思路!孟德尔随机化联合共定位,IF冲上12+

今天分享的这篇文章很有意思&#xff0c;用上了统计学中的“顶流CP”孟德尔随机化贝叶斯共定位&#xff0c;强强联手&#xff0c;让孟德尔随机化不再单调&#xff01;本文思路清晰&#xff0c;设计严谨&#xff0c;结果可靠&#xff0c;想学习孟德尔随机化发文套路的千万不要错…

【selenium 】操作元素

操作元素 元素操作鼠标操作键盘操作 元素操作 元素操作示例清空输入框clear()deiver.find_element_by_id(“username”).clear()输入文字send_keys()deiver.find_element_by_id(“username”).send_keys(‘zs’)元素点击 click()deiver.find_element_by_id(“login”).click()…

手持小风扇哪个牌子比较好?五大热门手持小风扇品牌推荐

炎炎夏日&#xff0c;真的需要一款随身小风扇来拯救我们的高温困境&#xff01;不过&#xff0c;市面上的选择太多了&#xff0c;真的让人眼花缭乱。今天&#xff0c;我就给大家快速推荐五款热门的手持小风扇&#xff0c;它们不仅轻便易携&#xff0c;而且各有特色。有的是风力…

vue3中若v-model绑定的响应字段出现三级,该如何实现rules验证规则

比如以下内容&#xff1a; 配置的rules内容 const rulesref({title:[{required:true,message:"请输入标题",trigger:"blur"},{max:50,message:"最大不能超过256个字",trigger:"blur"}],Category:[{required:true,message:"请选择…

使用Vue-cli脚手架创建uni-app项目(Vue2版本)

文章目录 前言准备工作接下来创建我们的 uni-app 项目 前言 uni-app官方说除了HBuilderX可视化界面&#xff0c;也可以使用 cli 脚手架&#xff0c;可以通过 vue-cli 创建 uni-app 项目。 uni-app官网文档 准备工作 需要安装 node.js 与 vue-cli 脚手架 我是用的版本如下 no…

智芯开发板(Z20K11x)介绍

一、智芯简介 智芯半导体(Zhixin Semiconductor)成立于2019年8月8日&#xff0c;在天津、合肥、苏州、南京、上海等地均 已设立分支机构&#xff1b;提供高可靠性的汽车电子芯片&#xff0c;广泛用于包括汽车车身电子 控制、新能源汽车控制、动力系统、汽车自动驾驶监控芯片等…

嵌入式学习——数据结构(队列、二叉树)——day49

1. 队列 1.1 定义 是一种线性数据结构类型&#xff0c;可以用数组或链表等基础数据结构来实现。它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。这意味着最先进入队列的元素会最先被移出。 1.2 基本概念 队列&#xff08;Queue&#xff…

微机原理与接口技术:重点内容|计算机系统|学习笔记

系列目录 前言 只将最重要的知识点考点列出来方便学习复习 目录 系列目录前言第1章 微型计算机概述第2章 16位和32位微处理机&#x1f31f;16位微处理器 8086 第3章 Pentium 的指令系统常用指令 第4章 存储器、存储管理和高速缓存技术第5章 微型计算机和外设的数据传输第6章 串…

ollama大模型qwen2:7b性能测试

部署環境信息&#xff1a; (base) rootalg-dev17:/opt# lscpu Architecture: x86_64CPU op-mode(s): 32-bit, 64-bitAddress sizes: 45 bits physical, 48 bits virtualByte Order: Little Endian CPU(s): 8On-line CP…

Application Studio 学习笔记(3)

一、工具栏按钮 1、panel控件添加工具栏按钮 展开panel控件的Advanced属性并点击Action Data&#xff0c;进入Action Data编辑界面 新增Action Data数据&#xff0c;Sequence设定工具按钮的显示顺序 默认工具按钮会显示在弹出工具栏中 勾选Add to Primary ToolBar后&#xff…