美文网首页
Redis数据结构 - Bitmaps

Redis数据结构 - Bitmaps

作者: 马蹄哒 | 来源:发表于2019-12-26 16:26 被阅读0次

Bitmaps不是实际意义上的数据类型,而是定义在字符串类型上的一组面向比特位的操作。由于字符串是二进制安全blobs(二进制大对象),它们的最大长度为512Mb,因此可以设置多达232个不同的比特位。

比特位操作分为两类:恒定时间的单个比特位操作,比如将一个比特位设置为1或0,或者获取它的值;对一组比特位的操作,例如计算给定位范围内的比特位数(例如,总体计数)。

Bitmaps的最大优点之一,在存储信息时,可以极大的节省空间。例如,在一个使用自增id来表示不同用户的系统中,可以仅使用512 MB内存就能存储40亿用户的单个比特位信息(例如,用户是否想订阅消息)。

比特位的设置和检索使用SETBIT和GETBIT命令:

127.0.0.1:6379> setbit key 10 1
(integer) 0
127.0.0.1:6379> getbit key 10
(integer) 1
127.0.0.1:6379> getbit key 11
(integer) 0

SETBIT命令的第一个参数是比特位数(第几个比特位),第二个参数是要将比特位设置的值,只能为1或0。如果所寻址的位在当前字符串长度之外,该命令会自动增大字符串。
GETBIT只返回指定索引处的比特位的值。超出范围的比特位(在目标键的字符串长度之外的比特位)的值认为是零。

有三个命令可以操作一组比特位:

  1. BITOP在不同的字符串之间执行逐位操作。提供的操作符有AND,OR,XOR和NOT。
  2. BITCOUNT实现总体计数,统计被设置为1的比特位的数量。
  3. BITPOS查找第一个具有指定值0或1的比特位。

BITPOS和BITCOUNT都能够操作字符串的字节范围,而不是字符串的整个长度。下面是一个简单的BITCOUNT调用示例:

127.0.0.1:6379> setbit key 10 1
(integer) 0
127.0.0.1:6379> setbit key 11 1
(integer) 0
127.0.0.1:6379> bitcount key
(integer) 2

Bitmaps常见应用场景:

  1. 各种各样的实时分析。
  2. 存储与对象id关联的存储高效且高性能的布尔信息。

例如,假设您想知道网站用户按天计的最长的(连续)访问记录。从零开始计算天数,这是您将web站点公开的日子,并在每次用户访问web站点时设置SETBIT。至于比特位索引,只需取当前unix时间戳,减去初始偏移量,然后除以3600*24。
通过这种方式,每个用户都有一个包含每天访问信息的小字符串。使用BITCOUNT可以很容易地获得指定用户访问网站的天数,而使用一些BITPOS调用,或者简单地获取和分析bitmap,可以很容易地计算最长的连续字符。

Bitmaps分割成多个键是很简单的,例如为了切分数据集,因为通常最好避免使用大键。要在不同的键之间切分bitmap,而不是将所有的比特位都设置到一个键,一个简单的策略就是在每个键上存储M个比特位,并使用bit-number/M来获取键名,使用bit-number MOD M来定位键内的第N个比特位。

相关文章

  • redis的bitmaps的应用-网站签到的设计和网站的数据统计

    在使用redis设计签到系统,我们可以使用集合和bitmaps两种数据结构。这边我们来说明一下bitmaps。 1...

  • Redis数据结构 - Bitmaps

    Bitmaps不是实际意义上的数据类型,而是定义在字符串类型上的一组面向比特位的操作。由于字符串是二进制安全blo...

  • redis BitMaps数据结构

    1. 数据结构模型 现代计算机用二进制(位)作为信息的基础单位,1个字节等于8位,例如“big”字符串是由3个字节...

  • Redis Bitmaps

    Redis位图:位图并不是一种实际的数据类型,而是在字符串数据类型上定义的按位操作集合(对普通的字符串键也可以进行...

  • 1. Redis初识(2018-07)

    数据结构 Key ----> String、Blobs、Bitmaps Key ----> Hash Tables...

  • Bitmaps

    Bitmaps 并非Redis的一个数据结构,其根本还是字符串,只不过可以直接对字符串的位进行操作 设置值: se...

  • 2.解决缓存穿透,布隆过滤器

    String 类型在redis内部是按照二进制存储的(bitmaps) setbit key offset val...

  • 【Redis缓存】- Redis数据结构、基本命令操作、持久化

    一、Redis 数据结构 要想使用 Redis 进行数据存储,首先需要了解 Redis 的数据结构,redis存储...

  • bitmaps.md

    Dirty Bitmaps and Incremental Backup Dirty Bitmaps are ob...

  • Redis

    Redis 关系型和非关系数据库比较: redis数据结构 redis列表数据结构 案例 概念: redis是一款...

网友评论

      本文标题:Redis数据结构 - Bitmaps

      本文链接:https://www.haomeiwen.com/subject/dkltaftx.html