bitmaps
Bitmaps简介
Redis提供了Bitmaps这个“数据类型” 可以实现对位的操作
(1) Bitmaps 本身不是一种数据类型,实际上它就是字符串(key-value),但是它可以对字符串的位进行操作
(2) Bitmaps单独提供了一套命令,所以在Redis中使用Bitmaps和使用字符串的方法不太相同。可以把BitMaps想象成位一个以位为单位的数组,每个数组的每个单元只能存储0和1,数组的下标在Bitmaps中叫做偏移量
如下图所示
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
· 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语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决