探索Redis特殊数据结构:Bitmaps(位图)在实际中的应用

一、概述

Redis官方提供了多种数据类型,除了常见的String、Hash、List、Set、zSet之外,还包括Stream、Geospatial、Bitmaps、Bitfields、Probabilistic(HyperLogLog、Bloom filter、Cuckoo filter、t-digest、Top-K、Count-min sketch、Configuration)和Time series。这些数据类型在Redis的数据结构中发挥着各自独特的作用。

这些数据类型丰富了Redis的功能,提供了灵活而高效的数据存储和操作方式。在使用时,选择合适的数据类型可以根据实际需求达到更好的性能和效果。

以下主要介绍Bitmaps的概念及使用:

位图不是实际的数据类型,而是在 String 类型上定义的一组面向位的操作,将其视为位向量。由于字符串是二进制安全 blob,其最大长度为 512 MB,因此它们适合设置最多 2^32 个不同位。

您可以对一个或多个字符串执行按位运算。位图用例的一些示例包括:

  • 对于集合成员对应于整数 0-N 的情况,有效的集合表示。
  • 对象权限,其中每一位代表一个特定的权限,类似于文件系统存储权限的方式。

基本命令

  • SETBIT将提供的偏移量处的一位设置为 0 或 1。
  • GETBIT返回给定偏移处的位值。
  • BITOP允许您对一个或多个字符串执行按位运算。

这里是完整的Redis Bitmaps操作。

二、命令语法

在 Redis 中,Bitmaps 是一种特殊的数据结构,用于处理位图信息。这对于一些特定的场景,比如权限控制、用户在线状态等,是非常有用的。以下是与 Bitmaps 相关的三个主要命令的详细说明:

SETBIT 命令:

SETBIT 用于设置位图中指定偏移位置的位的值。

语法:

SETBIT key offset value
  • key: 指定位图的键名。
  • offset: 指定要设置的位的偏移位置。
  • value: 指定要设置的位的值,可以是 0 或 1。

示例:

# 将位图 key 的第 5 位设置为 1
127.0.0.1:6379> SETBIT mybitmap 5 1
(integer) 0

GETBIT 命令:

GETBIT 用于获取位图中指定偏移位置的位的值。

语法:

GETBIT key offset
  • key: 指定位图的键名。
  • offset: 指定要获取的位的偏移位置。

示例:

# 获取位图 mybitmap 的第 5 位的值
127.0.0.1:6379> GETBIT mybitmap 5
(integer) 1

BITOP 命令:

BITOP 用于对多个位图执行按位操作,并将结果存储在目标位图中。

语法:

BITOP operation destkey key [key ...]
  • operation: 指定按位操作的类型,可以是 AND、OR、XOR、NOT。
  • destkey: 指定目标位图的键名。
  • key: 指定参与操作的位图键名,可以是一个或多个。

示例:

# 对位图 key1 和 key2 执行按位 OR 操作,将结果存储在 destkey 中
127.0.0.1:6379> BITOP OR destkey key1 key2
(integer) 6

在这个示例中,destkey 存储了执行 OR 操作的结果,其中有 6 个位被设置为 1。

三、应用示例

为了简单实现用户在线状态功能,我们可以使用 Redis Bitmaps 记录用户在线状态。以下是一个简单的步骤,使用命令行工具:

步骤 1: 记录用户在线状态

使用 SETBIT 命令记录用户在线状态。这里我们以用户ID为键名,每一位表示一个时刻的在线状态,1表示在线,0表示离线。

# 用户1在线
127.0.0.1:6379> SETBIT online_status 1 1# 用户2在线
127.0.0.1:6379> SETBIT online_status 2 1# 用户3在线
127.0.0.1:6379> SETBIT online_status 3 1

步骤 2: 查询用户在线状态

使用 GETBIT 命令查询用户的在线状态。

# 查询用户1的在线状态
127.0.0.1:6379> GETBIT online_status 1
(integer) 1

步骤 3: 统计在线用户数量

使用 BITCOUNT 命令统计在线用户的数量。

# 统计在线用户数量
127.0.0.1:6379> BITCOUNT online_status
(integer) 4

以二进制方式显示就是以下结果:

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

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

相关文章

【机组】算术逻辑运算单元实验的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《机组 | 模块单元实验》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 ​ 目录 🌺 一、 实验目的…

为您的网站添加网站底部美化代码 支持任意网站

将下面代码放在网站底部或者侧边栏,主要是cssjs的代码!html格式! 在逛 Gitee、Github 等各大代码仓库时,往往能看到以下这种徽章式的网页链接,美观好看又方便,那么这个徽章是如何制作出来的呢?…

区间预测 | Matlab实现BiLSTM-Adaboost-ABKDE的集成双向长短期记忆网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现BiLSTM-Adaboost-ABKDE的集成双向长短期记忆网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现BiLSTM-Adaboost-ABKDE的集成双向长短期记忆网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 …

web架构师编辑器内容-编辑器组件图层面板功能开发01-锁定隐藏功能的开发

我们这一部分主要是对最右侧图层面板功能进行剖析,完成对应的功能的开发: 每个图层都对应编辑器上面的元素,有多少个元素就对应多少个图层,主要的功能如下: 锁定功能:点击锁定,在编辑器中没法编辑对应的组…

瑞_Java开发手册_(四)安全规约

🙊前言:本文章为瑞_系列专栏之《Java开发手册》的安全规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约,所以本系列专栏主要以这本书进行讲解和拓展,有需要的小伙伴可以点击链接下载。本文仅供大家交流、学习及研…

如何用Python调用智谱AI的API进行智能问答

一、引言 随着人工智能技术的不断演进,以ChatGPT为首的智能聊天机器人如:文心一言、通义千问、智谱AI等受到越来越多人的喜欢。这些智能引擎不仅有网页版,而且开放了免费的api接口,并给出了样例代码。 这样,我们可以…

Rust 错误处理(上)

目录 1、用 panic! 处理不可恢复的错误 对应 panic 时的栈展开或终止 1.1 使用 panic! 的 backtrace 2、用 Result 处理可恢复的错误 2.1 匹配不同的错误 2.2 失败时 panic 的简写:unwrap 和 expect 2.3 传播错误 错误是软件中不可否认的事实,所…

jmeter-线程数设置为1,循环10次没问题,循环100次出现异常

一、多次尝试,发现出现异常的接口大致相同。 解决办法:在第一个出现异常的接口下添加超时时间,固定定时器:2000ms,再次运行就没问题了。 二、压力机自身存在的问题 1)在网络编程中,特别是在短…

20240112-补 制作两个字符串字谜的最少步骤数

题目要求 给你两个长度相同的字符串 s 和 t。在一个步骤中,你可以选择 t 中的任意一个字符并用另一个字符替换它。 返回将 t 变为 s 的变位所需的最少步数。 字符串的 "字谜 "是指字符串中的相同字符具有不同(或相同)的排列顺序…

使用PyTorch实现混合专家(MoE)模型

Mixtral 8x7B 的推出在开放 AI 领域引发了广泛关注,特别是混合专家(Mixture-of-Experts:MoEs)这一概念被大家所认知。混合专家(MoE)概念是协作智能的象征,体现了“整体大于部分之和”的说法。MoE模型汇集了各种专家模型…

CMU15-445-Spring-2023-Project #4 - Concurrency Control

前置知识,参考上一篇博客:CMU15-445-Spring-2023-Project #4 - 前置知识(lec15-20) 通过添加一个锁管理器在 BusTub 中支持事务,然后将其用于并发查询执行。锁管理器将支持五种锁模式下的表锁和元组锁:int…

「解析」Jetson配置 git服务

这两天感冒了在家休养,想着把之前买的 Jetson 开发板用起来,买Jetson的初衷就是用来学习Linux系统,顺道可以部署算法,以及一些其他需求,相比树莓派而言,Jetson开发相对更贵,但是其配备了英伟达的…

电子学会C/C++编程等级考试2023年09月(八级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:最短路径问题 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的任务是找出从一点到另一…

详细讲解Python中的aioschedule定时任务操作

目录 前言1. 基本概念2. 基本API3. Demo 前言 如果下面的函数库无法执行&#xff0c;出现类似&#xff1a;&#xff08;前提是python3.7以上&#xff09; AttributeError: module ‘asyncio‘ has no attribute ‘run‘请检查run是否可跳转&#xff0c;如果无法跳转&#xff…

element plus 可选择树形组件(el-tree) 怎样一键展开/收起?实现方法详解

实现代码&#xff1a; 按钮&#xff1a; <el-button click"takeall" style"height: 24px">{{zhanstatus % 2 ! 0 ? "收起所有" : "展开所有"}} </el-button> 组件&#xff1a; <el-form-item label"可选择菜单…

harbor https

harbor https部署 准备docker-compose安装https 证书harbor安装访问harbor推镜像到harbor 准备 192.168.112.99&#xff0c;harbor&#xff0c;centos7 192.168.112.3&#xff0c;测试机&#xff0c;centos7 docker版本&#xff1a;docker-ce 20.10.16&#xff08;部署参考&a…

Redis主从+哨兵集群(基于CentOS-8.0)高可用部署方案

目录 一、环境描述 二、Redis 主从集群部署 2.1 Redis下载 2.2 Redis解压 和移动文件 2.4 编译、安装Redis 2.6 新建 bin 和 etc 文件夹 2.7 分发Redis 2.8 配置 2.8.1 主节点配置 2.8.2 从节点配置 2.9 启动Redis服务 2.10 验证主从服务 2.11 查看节点角色信息 2…

有序矩阵中第 K 小的元素

题目链接 有序矩阵中第 K 小的元素 题目描述 注意点 每行和每列元素均按升序排序找到一个内存复杂度优于 O(n) 的解决方案 解答思路 使用二分查找&#xff0c;思路为&#xff1a; &#xff08;1&#xff09;因为左上角的元素值更小&#xff0c;右下角的元素值更大&#xf…

初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(5)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【Mybatis】说一下 mybatis 的一级缓存和二级缓存

​ &#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Mybatis ⛳️ 功不唐捐&#xff0c;玉汝于成 ​ 目录 前言 正文 一级缓存&#xff08;Local Cache&#xff09;&#xff1a; 范围&#xff1a; 生命周期&#xff1a; 默认开启&…