Redis:Bitmaps使用场景和常用命令

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis:Bitmaps使用场景和常用命令

Bitmaps介绍

  • Redis提供的Bitmaps这个“数据结构”可以实现对位的操作。Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作。
  • 可以把Bitmaps想象成一个以位为单位数组数组中的每个单元只能存0或者1数组的下标在bitmaps中叫做偏移量
  • 单个bitmaps的最大长度是512MB,即2^32个比特位。
  • bitmaps的最大优势是节省存储空间。例如,在一个以自增id代表不同用户的系统中,我们只需要512MB空间就可以记录40亿用户的某个单一信息(比如,用户是否希望接收新闻邮件)。
  • 有两种类型的位操作:一类是对特定bit位的操作,比如设置/获取某个特定比特位的值。另一类是批量bit位操作,例如在给定范围内统计为1的比特位个数。
  • Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR以及其它位操作。


Bitmaps使用场景

  1. 各种实时分析(Real time analytics of all kinds)。
  2. 存储与对象ID关联的布尔信息,要求高效且高性能(Storing space efficient but high performance boolean information associated with object IDs.)。
  • 例如你想知道自己网站用户的最长连续访问天数。从0开始计数,每当有用户访问时,使用setbit设置一个bit位,bit位的index可以这样生成:(当前unix时间戳-计数开始时的时间戳)/(3600*24)。
  • 通过这种方法,你可以获取每个用户的每日来访记录。使用bitcount可以很容易的统计出某个特定用户的来访天数。使用几个bitpos命令,或者直接获取并分析对应的位图,就可以很容易的算出最长连续访问天数
  • bitmaps通常被分割成多个key,以免单个key中存放的数据过大。有一个分割key的小技巧:每个key存放M个bit位,key以”比特数(bit-number)/M”命名。第N个bit位,对应key中的位置用”比特数(bit-number)模M”获得。
  • 假设我们每个key只存储100位,现在有一个id为8303的用户来访问。那么这个用户对应的key应该是83(8303/100),在key:83中,与之对应的位置应该是3(8303 mod 100)。使用如下命令记录该用户访问:

   

setbit 83 3 1

                     

Bitmaps常用命令

1.设置值

命令:setbit key offset value

setbit命令接收两个参数,

  • 第一个参数表示你要操作的是第几个bit位,第二个参数表示你要将这个位设为何值,可选值只有0,1两个。
  • 如果所操作的bit位超过了当前字串的长度,reids会自动增大字串长度。

 

2 获取值

命令:getbit key offset

getbit只是返回特定bit位的值。如果试图获取的bit位在当前字串长度范围外,该命令返回0

 

3 获取Bitmaps指定范围值为1的个数

命令:bitcount key [start] [end]

 

4 Bitmaps间的运算

  • bitop:对两个不同字串进行位运算。可进行的运算有AND, OR, XOR以及NOT

 

4 .1 计算Bitmaps的交集的数量

命令:bitop and destkey key[key…]

返回:保存到 destkey 的字符串(1字符等于8位)的长度,和输入 key 中最长的字符串长度相等。

4 .2 计算Bitmaps的并集的数量

命令:bitop or destkey key[key…]

返回:保存到 destkey 的字符串(1字符等于8位)的长度,和输入 key 中最长的字符串长度相等。

4 .3  计算Bitmaps的非集的数量

命令:bitop not destkey key

返回:保存到 destkey 的字符串(1字符等于8位)的长度,和输入 key 中最长的字符串长度相等。

4 .4  计算Bitmaps的异或集的数量

命令:bitop xor destkey key[key..]

返回:保存到 destkey 的字符串(1字符等于8位)的长度,和输入 key 中最长的字符串长度相等。

 

5 计算Bitmaps中第一个值为targetBit的偏移量

  • bitpos: 查找第一个值为0/1的比特位的位置

命令:bitpos key targetBit [start][end]

返回:第一个值为的偏移量



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3天前
|
NoSQL Redis 数据库
Redis中的常用命令非常丰富,涵盖了各种数据类型的基本操作以及服务器管理和维护的相关指令
【5月更文挑战第15天】Redis常用命令包括通用(如PING、SELECT)、键操作(KEYS、EXISTS、DEL)、字符串(SET、GET)、哈希(HSET、HGET)、列表(LPUSH、LPOP)、集合(SADD、SMEMBERS)和有序集合(ZADD、ZRANGE)等。这些命令用于数据操作及服务器管理,满足不同场景需求。了解更多命令,建议参考Redis官方文档。
11 2
|
3天前
|
存储 NoSQL Redis
Redis基础命令集详解
Redis基础命令集详解
15 1
|
3天前
|
存储 NoSQL Redis
Redis 常用命令
Redis 常用命令
17 0
|
3天前
|
存储 NoSQL Redis
深入浅出Redis(零):Redis常用命令的使用
深入浅出Redis(零):Redis常用命令的使用
|
3天前
|
存储 NoSQL 关系型数据库
深入浅出Redis(十二):Redis的排序命令Sort
深入浅出Redis(十二):Redis的排序命令Sort
|
3天前
|
NoSQL Linux Redis
Redis的介绍,以及Redis的安装(本机windows版,虚拟机Linux版)和Redis常用命令的介绍
Redis的介绍,以及Redis的安装(本机windows版,虚拟机Linux版)和Redis常用命令的介绍
27 0
|
3天前
|
存储 NoSQL 定位技术
Redis常用数据类型及常用命令
这些是Redis中常用的数据类型和命令。Redis还提供了许多其他命令和功能,用于数据存储、操作和查询。你可以根据需要选择适当的数据类型和命令来满足你的应用程序需求。
25 4
|
3天前
|
存储 NoSQL Java
Redis入门到通关之ZSet命令
Redis入门到通关之ZSet命令
18 0
|
存储 消息中间件 缓存
Redis最常用的使用场景
Redis最常用的使用场景
230 0
|
3天前
|
负载均衡 监控 NoSQL
Redis的几种主要集群方案
【5月更文挑战第15天】Redis集群方案包括主从复制(基础,读写分离,手动故障恢复)、哨兵模式(自动高可用,自动故障转移)和Redis Cluster(官方分布式解决方案,自动分片、容错和扩展)。此外,还有Codis、Redisson和Twemproxy等工具用于代理分片和负载均衡。选择方案需考虑应用场景、数据量和并发需求,权衡可用性、性能和扩展性。
32 2