7.Redis数据类型(Bitmap)

Bitmap

Bitmap 是 Redis 中的一种数据结构,用于表示位图(bit array),由0和1状态表现的二进制位的bit数组。
在这里插入图片描述

bitmap是属于redis的string数据类型,Redis中一个字符串类型的值最多能存储512MB 的内容,每个字符串由多个字节组成,每个字节又由8个Bit 位组成,上限为232次方。(512 * 1024 * 1024 * 8)42.9亿

它通常用于处理大规模数据集中每个元素的状态,比如用户的在线/离线状态(每个用户对应一个位,表示在线(1)或离线(0))、用户签到情况(每天对应一个位,用户当天签到则将该位设为 1)、消息的去重等等。

GETBIT 获取某一位的值

GETBIT key offset
用来获取某一位上的值。
返回值: Integer(整型)某一位上的值0或1。
当偏移量 offset 比字符串的长度大,或者当 key 不存在时,返回默认值0。

当前状态位:
01100001

127.0.0.1:6379> GETBIT k1 0
(integer) 0
127.0.0.1:6379> GETBIT k1 1
(integer) 1
127.0.0.1:6379> GETBIT k1 2
(integer) 1
127.0.0.1:6379> GETBIT k1 3
(integer) 0
127.0.0.1:6379> GETBIT k1 365
(integer) 0

SETBIT 设置某一位的值

SETBIT key offset value
其中 offset 表示偏移量(相当于数组的下标),也是从0开始。
返回值: Integer(整型)返回值为set之前的值(0或1)。

用来设置或者清除某一位上的值,其返回值是原来位上存储的值。key 所有的位的初始状态下都为0,可以自动扩容,最大为40多个亿。

127.0.0.1:6379> SETBIT k1  1  1
(integer) 0
127.0.0.1:6379> SETBIT k1  7  1
(integer) 0
127.0.0.1:6379> get k1
"A"
127.0.0.1:6379> SETBIT k1 2  1
(integer) 0
127.0.0.1:6379> SETBIT k1 3  1
(integer) 0
127.0.0.1:6379> SETBIT k1 3  0
(integer) 1
127.0.0.1:6379> type k1
string

当前状态位:
01100001
STRLEN key 获取占用的字节数

STRLEN key
指定 key 所储存的字符串值的长度。(字节数)

127.0.0.1:6379> SETBIT k2 0 1
(integer) 0
127.0.0.1:6379> SETBIT k2 7 1
(integer) 0
127.0.0.1:6379> STRLEN k2
(integer) 1
127.0.0.1:6379> SETBIT k2 8 1
(integer) 0
127.0.0.1:6379> STRLEN k2
(integer) 2

BITCOUNT 统计为1的数量

BITCOUNT key [start end [BYTE | BIT]]
返回值: 统计为1的数量。

统计key的位上为1的数量,通过指定额外的 start 或 end 参数,可以让计数只在特定的位置上进行。
start 和 end 设置统计的范围,单位默认设置BYTE。可以使用负数值:比如-1表示最后一个位,而-2表示倒数第二个位。start和end的值既可以是正数也可以是负数,正数表示从正序,反之为倒序。

127.0.0.1:6379> SETBIT uid:login123 1 1 
(integer) 0
127.0.0.1:6379> SETBIT uid:login123 2 1 
(integer) 0
127.0.0.1:6379> SETBIT uid:login123 3 1 
(integer) 0
#当前为 01110000
#获取整个key上为1的个数
127.0.0.1:6379> BITCOUNT uid:login123
(integer) 3
# 获取0字节(偏移量为0-7)长度的位置上为1的个数
127.0.0.1:6379> BITCOUNT uid:login123 0 0 BYTE
(integer) 3
# 偏移量为0-1长度的位置上为1的个数
127.0.0.1:6379> BITCOUNT uid:login123 0 1 BIT
(integer) 1

BITOP

BITOP <AND | OR | XOR | NOT> destkey key [key …]
在多个key之间执行逐位地进行位操作,并且将结果存储进指定key中。
operation 参数可选项:AND(逻辑与)、OR(逻辑或)、XOR(逻辑异或)、NOT(逻辑非)(其中NOT操作只接受一个key)。

返回存储在目标键中的字符串长度,该字符串长度等于输入键中对应的字符串中长度最长的值。

BITOP AND destkey key [key …] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。
BITOP XOR destkey key [key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。
BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey 。


127.0.0.1:6379> SETBIT b1 0 1
(integer) 0
127.0.0.1:6379> SETBIT b1 1  1
(integer) 0
127.0.0.1:6379> SETBIT b2 0 1
(integer) 0
127.0.0.1:6379> SETBIT b2 2 1
(integer) 0
b1: 11000000
b2: 10100000
//and 操作。
127.0.0.1:6379> BITOP and b3  b1 b2
(integer) 1
b3: 10000000


  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis数据类型有String、Hash、List、Set、Zset、GEO、Stream、HyperLogLog和Bitmap。在实际应用中,不同的数据类型可以用于不同的场景。 1. String类型:主要用于缓存和存储单个的值,比如用户的登录信息、计数器等。 2. Hash类型:适用于存储和获取对象的多个字段,比如存储用户的信息、商品的属性等。 3. List类型:可以按照插入顺序存储多个值,并支持在列表的两端进行插入和删除操作,比如消息队列、实时聊天记录等。 4. Set类型:用于存储多个不重复的值,也可以进行交集、并集、差集等操作,比如存储用户的好友列表、标签等。 5. Zset类型:有序集合,每个元素都会关联一个分数,可以根据分数进行范围查找和排序,适用于排行榜、带权重的数据等。 6. GEO类型:用于地理位置信息的存储和查询,可以计算距离、查找附近的位置等。 7. Stream类型:适用于消息队列的场景,可以按照时间顺序存储和消费消息。 8. HyperLogLog类型:用于统计独立元素的个数,可以进行基数估算,适用于统计UV、PV等场景。 9. Bitmap类型:用于位图操作,可以进行位运算和统计,比如用户签到、在线状态等。 在实际应用中,根据具体的需求和数据特点,选择合适的Redis数据类型可以带来更好的性能和扩展性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [最全总结Redis数据类型使用场景](https://blog.csdn.net/qq_27681741/article/details/125289210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值