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

浙公网安备 33010602011771号