redis操作位图

简介:

操作位图,就是操作二进制文件,类似于java中的位运算,这样做的好处,一个是效率高,另一个是节约空间,相比于字符串,效果是很明显的。

说一个的案例,一个用户一年的签到记录,如果用Sring类型存储,那么就需要365个key/value。那如果使用位图的话,假设网站上线第一天,这个人签到了就存1,没签到就存0,那么就是1101010101。。。。。

每天的的记录占一个位,365天就是365个位,也就是46个字节,这样有效的节省了存储空间,如果要统计用户签到的天数,只需要统计1的个数。

位图的操作,可以直接操作对应的字符串(get/set),或者直接操作位(getbit/setbit)

基本操作:

1.零存整取:操作的时候用位操作,获取的时候获取字符串

例如存一个java

字符 ASCII 二进制
j 74 01001010
a 77 01100001
v 118 01110110

接下来去存储

存java:默认是0,所以只存1

  setbit name 1    1

  setbit name 4    1

  setbit name 6    1 

  setbit name 9    1

  setbit name 10  1

  setbit name 15  1 

  setbit name 17  1

  setbit name 18  1

  setbit name 19  1 

  setbit name 21  1

  setbit name 22  1 

  setbit name 25  1 

  setbit name 26  1

  setbit name  31  1 

取java:

  get name

2.整存零取:操作的时候用字符串操作,获取的时候用位获取

存字符串:

set k1 java

取:

3.零存零取

统计:

1的个数表示签到的天数,0表示没有签到

用bitcount  key命令

bitpos也是统计,不过是范围统计,比在指定范围内出现的第一个零或者一。如统计这个用户在某个时间段的签到次数

bit的批处理

在redis新加的功能,bitfiled命令

例如:bitfiled name get  u4 0:表示获取name中的位,从零开始,获取4个位,返回一个无符号数字。

           bitfiled name get  i4 0:表示获取name中的位,从零开始,获取4个位,返回一个有符号数字。

原文地址:https://www.cnblogs.com/javazl/p/12663656.html