Redis(位图Bitmap和位域Bitfield)

位图:

位图是字符串类型的扩展。

Redis中的位图是一种特殊的数据结构,用于表示一系列位的集合。它可以存储大量的布尔值数据,每个位代表一个布尔值(0或1),并且可以对这些位进行各种位运算操作。位图通常用于记录用户的行为数据、统计数据等,以及节省存储空间和快速计算数据的需求。 Redis提供了一系列的位图操作命令,可以对位图进行设置、获取、统计、位运算等操作。

位图的命令中都有BIT。

使用SETBIT 来设置位图, 前面的数字是偏移量,后面的数字是值。使用GETBIT获取偏移量的值。

前面说过位图是字符串类型的扩展,所以可以使用设置字符串的命令来设置位图,如上图就可以一次性设置多个偏移量。

使用 BITCOUNT查询位图中1的个数。和C++STL中的bitset中的count函数效果一样。

在Redis中,BITPOS命令用于查找指定位图中第一个设置或清除的位的位置。其基本语法如下:

cpp 复制代码
BITPOS key bit [start] [end]
  • key:要操作的位图的键名。

  • bit:要查找的位的值,可以是0或1。

  • start:可选参数,指定起始位置,默认为0。

  • end:可选参数,指定结束位置,默认为-1(表示整个位图)。

BITPOS命令会在指定的起始位置到结束位置范围内查找第一个设置或清除的位的位置,并返回其索引值。如果指定的位值在指定范围内不存在,则返回-1。

例如,假设有一个名为mybitmap的位图,我们可以使用以下命令来查找第一个设置为1的位的位置:

cpp 复制代码
BITPOS mybitmap 1

这将返回第一个设置为1的位的位置,如果不存在则返回-1。

如果我们想在指定范围内查找第一个设置为0的位的位置,我们可以使用以下命令:

cpp 复制代码
BITPOS mybitmap 0 2 5

这将在mybitmap位图的索引2到索引5之间查找第一个设置为0的位的位置。

总之,BITPOS命令可以用于在位图中查找指定位值的位置,是对位图进行操作和查询的有用工具。

位域:

在 Redis 中,位域(Bitfield)是一种用于操作位图的高级命令。通过位域命令,可以对位图中的指定位进行读取、设置、清除等操作。

位域命令的基本语法如下:

cpp 复制代码
BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]

其中,各个参数的含义如下:

  • key:要操作的位图的键名。

  • GET type offset:从位图中获取指定偏移量处的位的值。

  • SET type offset value:设置位图中指定偏移量处的位的值。

  • INCRBY type offset increment:对位图中指定偏移量处的位进行增加或减少操作。

  • OVERFLOW WRAP|SAT|FAIL:指定位域命令的溢出行为,可以选择包装(WRAP)、饱和(SAT)或失败(FAIL)。

通过位域命令,可以方便地对位图进行各种复杂的位操作,如获取、设置、增减等。这使得 Redis 的位图数据结构更加灵活和强大,能够更加高效地处理布尔值数据。

总之,位域是 Redis 中用于操作位图的高级命令,可以对位图中的位进行各种操作,是对位图数据结构的扩展和增强。

位域能将很多小的整数存储到一个较大的位图中,这样就可以更加高效的使用内存。

使用位域可以做出一个游戏角色的属性图。

使用BITFIELD设置等级为1,上图U8的意思是一个8位的无符号整数,#0表示第一个位置。

若使用i8则表示,8位有符号整数。

使用GET查看内存中的情况,返回的是十六进制的01.若想查看10进制的等级只需要将第一句语句中的set改成get就好了。

#1代表第二个位置,他后面的100为设置的值,可以将他看作金钱数量为100。使用GET查看内存中的情况。

可以使用incrby来增加100个金币。 减少就可以使用-100。

相关推荐
Shawn Dev15 分钟前
MySQL Binlog 数据误删除恢复完全指南
数据库·mysql·elasticsearch
oradh15 分钟前
Oracle ADRCI 诊断数据工具总结
数据库·oracle·adrci
zzzll111125 分钟前
Loop Engineering:循环工程的原理、实践与应用
java·数据库·python
IpdataCloud34 分钟前
IPv6查出来的地理位置是错的?技术解析与双栈定位方案
数据库·tcp/ip·ip
数字新视界1 小时前
信创动环监控厂家深入剖析智能机房环境监控技术应用与挑战
服务器·数据库·物联网·芯片·动环监控系统
羑悻的小杀马特1 小时前
打破深海垄断:国产数据库如何托起固井软件的“数据心脏”?
数据库
今天AI了吗1 小时前
从 LLM 到 Agent Skill:把 AI 底层概念串起来
数据库·人工智能·sql·深度学习·神经网络·算法·机器学习
2401_894915531 小时前
新手落地 Geo 优化:源码下载、依赖安装、数据库初始化完整步骤
运维·服务器·数据库·人工智能·缓存·开源
万维易源1 小时前
免费药品信息查询:用API 读懂常用药
java·前端·数据库·药品信息·药品查询·药品查询api
郑州光合科技余经理1 小时前
餐饮预定系统架构拆解:订单链路、权限组织与私有化源码交付
java·开发语言·前端·数据库·人工智能·系统架构·php