bitmaps

Bitmaps简介

Redis提供了Bitmaps这个“数据类型” 可以实现对位的操作
(1) Bitmaps 本身不是一种数据类型,实际上它就是字符串(key-value),但是它可以对字符串的位进行操作
(2) Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。可以把BitMaps想象成位一个以位为单位的数组,每个数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量

如下图所示
image

Bitmaps命令

setbit

# setbit key offset value 设置Bitmaps中某个偏移量的值(只能是0或1)
实例 :每个独立用户是否访问过网站存放在Bitmaps中。将访问过的用户记为1 没有访问过的用户记为0 用偏移量作为用户的id
127.0.0.1:6379> setbit user:id 1 1
(integer) 0
127.0.0.1:6379> setbit user:id 6 1
(integer) 0
127.0.0.1:6379> setbit user:id 11 1
(integer) 0
127.0.0.1:6379> setbit user:id 15 1
(integer) 0
127.0.0.1:6379> setbit user:id 19 1
(integer) 0
如果用户ID过大 比如:10000,这样直接用Bitmaps偏移量,定会造成内存的浪费,最好就是```将用户ID减去一个指定的值```

getbit

# getbit key offsert 获取Bitmaps中某个偏移量(从0开始)的值
可以判断固定时间内用户有没有访问过网站
127.0.0.1:6379> getbit user:id 1
(integer) 1
127.0.0.1:6379> getbit user:id 6
(integer) 1
127.0.0.1:6379> getbit user:id 2
(integer) 0

bitcount

bitcount key [start end] # 统计字符串从start字节到end字节bit值为1的总数量(1字节为8bit)
127.0.0.1:6379> bitcount user:id
(integer) 5
127.0.0.1:6379> bitcount user:id 0 -1
(integer) 5

bitop

bitop and(or/not/xor) destkey [key]

bitop是一个复合操作,它可以做多个Bitmaps的and(交集)、or(并集)、not(非)、xor(异或)操作并将结果保存在destkey中。

# 20201001访问网站的人数
127.0.0.1:6379> setbit user:id:20201001 1 1
(integer) 0
127.0.0.1:6379> setbit user:id:20201001 3 1
(integer) 0
127.0.0.1:6379> setbit user:id:20201001 5 1
(integer) 0
127.0.0.1:6379> setbit user:id:20201001 9 1
(integer) 0
# 20201002 访问网站的人数
127.0.0.1:6379> setbit user:id:20201002 1 1
(integer) 0
127.0.0.1:6379> setbit user:id:20201002 2 1
(integer) 0
127.0.0.1:6379> setbit user:id:20201002 3 1
(integer) 0
127.0.0.1:6379> setbit user:id:20201002 5 1
(integer) 0
# 这两天都访问过网站的人数
127.0.0.1:6379> bitop and user:id:20201001_02 user:id:20201001 user:id:20201002
(integer) 2 # 这两天都访问过网站的人数
它会创建user:id:20201001_02 这个键,类型为none
127.0.0.1:6379> keys *
1) "user:id:20201002"
2) "user:id:20201001_02"
3) "user:id:20201001"
127.0.0.1:6379> type user:id20201001_02
none

Bitmaps适合用于统计大量在线人数,
少量的用set

posted @   小罗要有出息  阅读(109)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示