Redis特殊数据类型Bitmap详解

5.3.1 位图场景简介

类似于Java中的位运算,是按位来进行存储的

基于实际场景理解:

  1. 我们正常要存一个对象,比如user,如果筛选用户是最快的
  2. 这时候我们就可以用0101来代表

1.比如疫情要统计感染人数:

全中国有14亿人,我们可以使用14亿个0把数据存起来,如果有感染就把0变为1

2.网站后台统计用户信息,分为活跃与不活跃

3.网站用户显示登录状态,登录与未登录

4.用户打卡状态:

如果要在Java中做,就需要设计数据表,存放user的信息与status

但是如果使用redis中的bitmaps,就可以利用

String与bitmaps的配合

set user:1:name xxx  user1:status: 0 

set user:2:name xxx  user2:status: 0

使用string存储用户信息,属性status存储位,

但是!还有一种更简单的方式,直接使用Bitmaps位图进行操作,它也是一种数据结构,二进制存储,非0即1

比如存储一个用户一年状态,365天=365bit 1字节=8bit 大概只需要46个字节左右就足够了!


5.3.2 setbit 命令使用详解

setbit key offset value

offset可以理解为空闲的位置或者Index

Redis特殊数据类型Bitmap详解_第1张图片

##使用bitmap可以记录一周的打卡状态
##最后我想要知道一周的打卡次数
##只需要判断它的位是1的,然后统计输出就行

127.0.0.1:6379> setbit sign 0 0
(integer) 0

127.0.0.1:6379> setbit sign 1 1
(integer) 0

127.0.0.1:6379> setbit sign 2 0
(integer) 0

127.0.0.1:6379> setbit sign 3 1
(integer) 0

127.0.0.1:6379> setbit sign 4 0
(integer) 0

127.0.0.1:6379> setbit sign 5 1
(integer) 0

127.0.0.1:6379> setbit sign 6 0
(integer) 0
127.0.0.1:6379> 


5.3.3 getbit 命令详解

getbit key offset

127.0.0.1:6379> setbit sign 0 0
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0

##获取某一天的打卡状态
##getbit命令
127.0.0.1:6379> getbit sign 1
(integer) 1
127.0.0.1:6379> getbit sign 2
(integer) 0
127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> 

5.3.4 bitcount 命令详解

bitcount key start end

127.0.0.1:6379> setbit sign 0 0
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0
127.0.0.1:6379> getbit sign 1
(integer) 1
127.0.0.1:6379> getbit sign 2
(integer) 0
127.0.0.1:6379> getbit sign 3
(integer) 1


##统计打卡天数
127.0.0.1:6379> bitcount sign 0 -1
(integer) 3

##统计打卡天数
127.0.0.1:6379> bitcount sign
(integer) 3
127.0.0.1:6379> 


你可能感兴趣的:(数据库,数据结构,数据库,redis,java,nosql)