redis之setbit应用

3,580 阅读1分钟

  最近项目中要做签到功能,查询到redis中的setbit可以完美解决。之前也没有用到过setbit这个命令,特此记录一下。 redis.io/commands/se…

命令格式:

1.SETBIT key offset value

  对 key 所储存的字符串值,设置或清除指定偏移量offset上的位(bit)。bitmap本身offset的限制0到2^32,内存限制为512MB,刚刚好是2^32个bit,也就是4294967296,也就是说,offset最大能到4294967296-1,有四十二亿。

用法:先举个例子,'a' 的ASCII码是 97。转换为二进制是:0110,0001 这里 offset 0 = '0' ,offset 1='1' ,offset2 = '1',offset 6 = '0' ,offset是从左往右计数的,也就是从高位往低位。 通过setbit命令把'a'改为'b' ,'b'的ascii码98 = 0110,0010,也就是把a的offset 6设置为1,offset 7设置为0即可

2.GITBIT key offset

  返回存储在key处的字符串值中offset处的位值

3.项目中的运用

int offset = LocalDate.now().getDayOfYear();
redisTemplate.opsForValue().setBit(key, offset, true);
System.out.println("签到成功");

if(redisTemplate.opsForValue().getBit(key, offset)){
   System.out.println("今天已签到过");
}