Redis的3大特殊数据类型(1)-BitMap

这篇具有很好参考价值的文章主要介绍了Redis的3大特殊数据类型(1)-BitMap。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

BitMap(位图/位数组)是Redis2.2.0版本中引入的一种新数据类型,该数据类型本质是一个仅含0和1的二进制字符串。因此可以把 Bitmap 想象成一个以位为单位的数组,数组的每个单元只能存储 0 和 1,数组的下标在 Bitmap 中叫做偏移量 offset,bitmap默认值都为0.
Redis的3大特殊数据类型(1)-BitMap
BitMap底层实际上使用字符串来存储,由于 Redis 中字符串的最大长度是 512 MB字节,所以 BitMap 的偏移量 offset 值也是有上限的,其最大值是:8 * 1024 * 1024 * 512 = 2^32(4G)。
由于 Redis中字符串的末尾都要存储一位分隔符,所以实际上 BitMap 的偏移量 offset 值上限是:2^32-1。

1.SETBIT key offset value

SETBIT 用来设置 key 对应第 offset 位的值(offset 从 0 开始算),可以设置为 0 或者 1。当指定的 KEY 不存在时,会自动生成一个新的字符串值。

127.0.0.1:6379> setbit isSign 0 0
(integer) 0
127.0.0.1:6379> setbit isSign 1 0
(integer) 0
127.0.0.1:6379> setbit isSign 2 1
(integer) 0
127.0.0.1:6379> setbit isSign 3 0
(integer) 0
127.0.0.1:6379> setbit isSign 4 0
(integer) 0
127.0.0.1:6379> setbit isSign 5 0
(integer) 0
127.0.0.1:6379> setbit isSign 6 1
(integer) 0
127.0.0.1:6379> setbit isSign 7 0

Redis的3大特殊数据类型(1)-BitMap

2.getbit key offset

获取 key 对应第 offset 位的值(offset 从 0 开始算)

127.0.0.1:6379> getbit isSign 0
(integer) 0
127.0.0.1:6379> getbit isSign 3
(integer) 0
127.0.0.1:6379> getbit isSign 6
(integer) 1

Redis的3大特殊数据类型(1)-BitMap

3.BITCOUNT key [ start end [ BYTE | BIT]]

用来计算指定 key 对应字符串中,被设置为 1 的 bit 位的数量。一般情况下,字符串中所有 bit 位都会参与计数,我们可以通过 start 或 end 参数来指定一定范围内被设置为 1 的 bit 位的数量。start 和 end 参数的设置和 GETRANGE 命令类似,都可以使用负数:比如 -1 表示最后一个位,而 -2 表示倒数第二个位等。
从 Redis 7.0.0 开始支持 BYTE 或者 BIT 选项

127.0.0.1:6379> bitcount isSign
(integer) 2
127.0.0.1:6379> bitcount isSign 0 -1
(integer) 2
127.0.0.1:6379> bitcount isSign 0 3
(integer) 2

Redis的3大特殊数据类型(1)-BitMap

4.BITOP operation destkey key [key …]

BITOP 是一个复合操作,支持在多个 key 之间执行按位运算并将结果存储在 destkey 指定的 key 中。BITOP 命令支持四种按位运算:AND(交集)、OR(并集)、XOR(异或) 和 NOT(非):

  • and: 与运算符(&) 两个同时为1,结果为1,否则为0
  • or: 或运算(|) 一个为1,其值为1
  • not: 取反(0110 0001 NOT: 1001 1110)
  • xor: 异或运算,值不同为1,否则为0
 127.0.0.1:6379> bitop and myop sign isSign
(integer) 1
127.0.0.1:6379> getbit myop 0
(integer) 0
127.0.0.1:6379> getbit myop 2
(integer) 1
127.0.0.1:6379> getbit myop 7
(integer) 0
127.0.0.1:6379> bitop or myop sign isSign
(integer) 1
127.0.0.1:6379> getbit myop 6
(integer) 1

Redis的3大特殊数据类型(1)-BitMap

5.BITPOS key bit [ start [ end [ BYTE | BIT]]]

用来计算指定 key 对应字符串中,第一位为 1 或者 0 的 offset 位置。除此之外,BITPOS 也有两个选项 start 和 end,跟 BITCOUNT 一样。
BYTE、BIT 这两个选项从 7.0.0 版本开始才能使用。

127.0.0.1:6379> bitpos isSign 1
(integer) 2
127.0.0.1:6379> getbit isSign 2
(integer) 1
127.0.0.1:6379> bitpos isSign 1 0 -1
(integer) 2
127.0.0.1:6379> getbit isSign 6
(integer) 1
127.0.0.1:6379> bitpos isSign 1 2
(integer) -1
127.0.0.1:6379> bitpos isSign 0
(integer) 0
127.0.0.1:6379> getbit isSign 0
(integer) 0

Redis的3大特殊数据类型(1)-BitMap

6.总结

BitMap常用来进行大数据量的二值统计,如疫情期间的感染情况(阳/阴),员工的考勤打卡签到(已打卡/未打卡),图像的二值化(黑/白),用户的活跃情况(活跃/不活跃),总统竞选投票支持情况(支持/不支持)…文章来源地址https://www.toymoban.com/news/detail-501988.html

到了这里,关于Redis的3大特殊数据类型(1)-BitMap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis(二)—— 五大基本数据类型和三大特殊数据类型

    1、常用命令  批量操作: redis可以定义对象  方式(一) :以JSON格式(其实就是key-value格式)保存一个对象 方式(二) : 把对象的两个属性定义成两个key 注意,如果采用第一种方式,那么无法单独取出字段哦~ 2、使用场景 数字int类型的string作为计数器,比如统计文章的

    2024年02月15日
    浏览(39)
  • Redis三种特殊数据类型

    geospatial 地理位置 Redis 地理空间数据类型简介 Redis 地理空间索引允许您存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。 基本命令 GEOADD 将位置添加到给定的地理空间索引(请注意,使用此命令,经度位于纬度之前)。 GEOSEARCH 返回具有给定半径或

    2024年02月11日
    浏览(41)
  • Java中利用BitMap位图实现海量级数据去重

    🏷️ 个人主页 :牵着猫散步的鼠鼠  🏷️ 系列专栏 :Java全栈-专栏 🏷️ 个人学习笔记,若有缺误,欢迎评论区指正 目录 前言 什么是BitMap?有什么用? 基本概念 位图的优势 位图的劣势 BitMap和Int的区别 使用场景 BitMap在Java中的使用 有许多方法可以用来去重,比如使用列

    2024年04月10日
    浏览(41)
  • Redis入门 - 3种特殊数据类型

    原文首更地址,阅读效果更佳! Redis入门 - 3种特殊数据类型 | CoderMast编程桅杆 https://www.codermast.com/database/redis/three-special-datatype.html 在我们平常的业务中基本只会使用到Redis的基本数据类型(String、List、Hash、Set、Sorted Set),特殊类型(Geo、Bitmap、Hyperloglog)类型只有在特殊的

    2024年02月09日
    浏览(37)
  • Redis——三个特殊的数据类型+事务

    全称为远程字典服务。 Redis——基础篇(包含redis在云服务上的docker化安装和连接以及常用命令)_连接docker中的redis_北岭山脚鼠鼠的博客-CSDN博客 1.内存存储、持久化,内存中是断电即失,因此持久化很重要(rdb,aof) 2.效率高,可以用于高速缓存。 3.发布订阅系统 4.地图信息分

    2024年02月13日
    浏览(43)
  • 详解redis的三种特殊数据类型

    14天学习训练营导师课程: 郑为中《Vue和SpringBoot打造假日旅社管理系统》 努力是为了不平庸~ 学习有些时候是枯燥的,但收获的快乐是加倍的,欢迎记录下你的那些努力时刻(学习知识点/题解/项目实操/遇到的bug/等等),在分享的同时加深对于知识点的理解,同时吸收他人

    2024年02月19日
    浏览(49)
  • 【Redis】特殊数据类型 Geo (地理位置)

    除了五中基本的数据类型外,Redis还支持两种特殊的数据类型,第一种 Geo (地理位置):用于存储地理位置相关的数据,例如经纬度、距离等。第二种 Stream (流):是一个高级的列表类型,支持对列表的批量操作,如添加多个元素、获取多个元素等。 Redis GEO(Geo Redis)是一个用

    2024年02月15日
    浏览(38)
  • Redis之bitmap类型解读

    目录 基本介绍 基本命令  Setbit  Getbit  BITCOUNT  应用场景 统计当日活跃用户 用户签到 bitmap - Redis布隆过滤器 (应对缓存穿透问题) 基本介绍 Redis 的位图(bitmap)是由多个二进制位组成的数组,只有两种状态,0和1, 数组中的每个二进制位都有与之对应的偏移量(从 0 开始)

    2024年02月11日
    浏览(37)
  • Roaring BitMap(高效压缩位图)

    BitMap的问题在于,不管业务中实际的元素基数有多少,它占用的内存空间都恒定不变。 如果BitMap中的位的取值范围是1到100亿之间,那么BitMap就会开辟出100亿Bit的存储空间。 但是如果实际上值只有100个的话,100亿Bit的存储空间只有100Bit为1,其余全部为0,数据存储空间浪费严

    2024年02月03日
    浏览(35)
  • 深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展

    目录 前言 Stream geospatial HyperLogLog Bitmaps Bitfields redis 中最关键的五个数据类型 String、List、Hash、Set、Zset 应用最广泛,同时 redis 也推出了额外的 5 个数据类型,他们分别是针对特殊场景才进行的应用的. Ps:这几种类型的具体使用不用记,记你也记不住,因为不常用,因此我们

    2024年02月15日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包