论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
PostgreSQL
›
Redis-Bitmap位图及其常用下令详解
Redis-Bitmap位图及其常用下令详解
立聪堂德州十三局店
金牌会员
|
2024-9-9 20:39:55
|
显示全部楼层
|
阅读模式
楼主
主题
851
|
帖子
851
|
积分
2553
1.Redis概述
2.Bitmap
Bitmap 是 Redis 中的一种数据结构,用于表示位图(bit array)。
它通常用于处置处罚大规模数据集中每个元素的状态,比如用户的在线/离线状态(每个用户对应一个位,表示在线(1)或离线(0))、用户签到情况(每天对应一个位,用户当天签到则将该位设为 1)、某个事件的发生情况等。
Bitmap 数据结构
在 Redis 中,Bitmap 被实现为一个二进制字符串,此中每个位(bit)都可以被设置或清除。
这使得 Bitmap 可以非常高效地表示大量的布尔值。
Bitmap 下令
1. SETBIT
将指定偏移量上的位设置为给定值(0 或 1)。
SETBIT key offset value 设置指定键(key)的位图(bitmap)中,特定偏移量(offset)处的位值(value)。
key
: Redis中的键,表示位图地点的位置。
offset
: 位图中的偏移量,即要设置的位的位置。偏移量从0开始,表示位图的第一个位。
value
: 要设置的位的值,只能是0或1。
Tips:
如果键不存在,则会创建一个新的字符串值,此中包罗足够的位数以包罗偏移量指定的位。
SETBIT 下令会设置位图中指定偏移量的位的值为指定的值(0或1)。
如果偏移量超过当前字符串值的长度,Redis会主动扩展字符串以包罗足够的位数。
返回值
SETBIT 下令返回设置前偏移量指定位的原始值(0或1)。
示例
假设有一个键名为 user:123
nline,用于表示在线状态的位图:
SETBIT user:123:online 0 1
复制代码
将位图 user:123
nline 中偏移量为0的位设置为1,表示用户123如今在线。
2. GETBIT
获取指定偏移量上的位的值(0 或 1)。
GETBIT key offset 是 Redis 中用于获取指定键的位图中,特定偏移量处的位值的下令。
key
: Redis 中的键,表示位图地点的位置。
offset
: 位图中的偏移量,即要获取位值的位置。偏移量从0开始,表示位图的第一个位。
Tips:
如果键不存在,大概偏移量超出了当前字符串值的长度,GETBIT 下令返回0。
GETBIT 下令返回指定偏移量的位的值,可以是0或1。
返回值
返回值为偏移量处位的当前值(0或1)。
示例
假设有一个键名为 user:123
nline,用于表示在线状态的位图:
GETBIT user:123:online 0
复制代码
这个下令将返回位图 user:123
nline 中偏移量为0的位的当前值,表示用户123是否在线(0表示离线,1表示在线)。
3. BITCOUNT
统计指定范围内的位为 1 的数量。
BITCOUNT key [start end [BYTE | BIT]] 是 Redis 中用于计算指定键的位图中,从 start 偏移量到 end 偏移量之间的全部位的数量的下令。
key
: Redis 中的键,表示位图地点的位置。
start
: 指定的起始偏移量。
end
: 指定的竣事偏移量。
BYTE | BIT
: 可选参数,用于指定单位是字节(BYTE)还是位(BIT)。默认为 BIT。
Tips
如果不加任何参数,默认情况下,BITCOUNT 下令会统计整个位图中全部位的数量。
可以通过指定 start 和 end 参数来计算位图中特定范围内的位的数量。
通过添加 BYTE 参数,可以将 start 和 end 参数表明为字节偏移量而不是位偏移量。
返回值
返回值为指定范围内(或整个位图)的位的数量。
示例
假设有一个键名为 user:123
nline,用于表示在线状态的位图:
BITCOUNT user:123:online
复制代码
这个下令将返回位图 user:123
nline 中全部位的数量,即用户123的在线状态记录数。
BITCOUNT user:123:online
0 10 BIT
复制代码
这个下令将返回位图 user:123
nline 中从偏移量0到10的位的数量。
4. BITOP
对一个或多个 Bitmap 进行位操纵,并将结果保存到 destkey 中(支持 AND、OR、XOR、NOT 等操纵)。
BITOP <AND | OR | XOR | NOT> destkey key [key ...] 是 Redis 中用于对多个位图执行位操纵的下令。
AND
: 对全部给定位图执行按位与操纵,并将结果存储到目标位图 destkey 中。
OR
: 对全部给定位图执行按位或操纵,并将结果存储到目标位图 destkey 中。
XOR
: 对全部给定位图执行按位异或操纵,并将结果存储到目标位图 destkey 中。
NOT
: 对单个给定位图执行按位非操纵,并将结果存储到目标位图 destkey 中。
参数分析
destkey
: 目标位图的键名,用于存储操纵结果。
key [key …]
: 要执行位操纵的一个或多个位图键名。
Tips
位操纵下令允许将多个位图合并或修改为新的位图。
操纵的位图可以是相同长度的位图,也可以是不同长度的位图,Redis 会主动对较短的位图进行扩展。
NOT 操纵只能对单个位图执行,对给定的位图取反后存储到目标位图中。
返回值
返回值为目标位图 destkey 中设置的位数,即操纵后目标位图中为1的位的数量。
示例
假设有两个位图键名为 user:123
nline 和 user:456
nline,用于表示用户的在线状态:
BITOP AND user:allonline user:123:online user:456:online
复制代码
下令将对 user:123
nline 和 user:456:online 进行按位与操纵,并将结果存储到 user:allonline 中,表示同时在线的用户。
BITOP OR user:anyonline user:123:online user:456:online
复制代码
下令将对 user:123:online 和 user:456:online 进行按位或操纵,并将结果存储到 user:anyonline 中,表示恣意在线的用户。
BITOP NOT user:123:offline user:123:online
复制代码
下令将对 user:123:online 进行按位非操纵,并将结果存储到 user:123:offline 中,表示用户123的在线状态取反。
5. BITPOS
寻找第一个或最后一个被设置为给定值的位的位置。
BITPOS 是 Redis 中用于查找位图中指定位的位置的下令。
key
: Redis 中的键,表示要查找的位图。
bit
: 要查找的位的值,可以是 0 或 1。
start
: 可选参数,指定开始查找的偏移量,默认为 0。
end
: 可选参数,指定竣事查找的偏移量,默认为最后一个位。
BYTE | BIT
: 可选参数,用于指定按字节还是按位查找,默认为 BIT。
Tips
BITPOS 下令用于在位图中查找指定位的位置。可以指定开始和竣事的偏移量来限定搜刮范围。
当指定 bit 为 1 时,BITPOS 将返回位图中第一个出现的 1 的位置;当指定 bit 为 0 时,BITPOS 将返回位图中第一个出现的 0 的位置。
可以通过指定 BYTE 参数来将偏移量表明为字节而不是位。
返回值
返回值为指定位图中指定位的位置,如果没找到对应的位,则返回 -1。
示例
假设有一个键名为 user:123:permissions,用于表示用户权限的位图:
SETBIT user:123:permissions 0 1
SETBIT user:123:permissions 3 1
SETBIT user:123:permissions 7 1
复制代码
这个下令将创建一个位图 user:123:permissions,并将偏移量0、3和7的位设置为1。
BITPOS user:123:permissions 1
复制代码
下令将返回位图 user:123:permissions 中第一个出现的 1 的位置,即偏移量0。
BITPOS user:123:permissions 1
2
复制代码
下令将在偏移量2之后的范围内查找第一个出现的 1,由于在此范围内没有 1,因此返回 -1。
BITPOS user:123:permissions 0 1 BYTE
复制代码
下令将以字节为单位,在偏移量1之前的范围内查找第一个出现的 1 的位置。
BITPOS 下令实用于必要确定位图中特定位的位置的场景,例如查找权限位、统计事件发生位等。
更多下令可以去官网查看哦~https://redis.io/docs/latest/commands/?group=bitmap
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
立聪堂德州十三局店
金牌会员
这个人很懒什么都没写!
楼主热帖
零信任介绍
哈夫曼应用
WPF开发随笔收录-获取软件当前目录的坑 ...
【iOS逆向与安全】frida-trace入门 ...
《微信小程序-基础篇》什么是组件化以 ...
计算机等级考试二级C语言上机题集(第1 ...
K8S 1.20 弃用 Docker 评估之 Docker C ...
django使用多个数据库实现
Go语言上手(三) | 青训营笔记 ...
《数据库》第1章 数据库系统概论 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表